TOJ 5438数据结构实验:生成BST
Posted kannyi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TOJ 5438数据结构实验:生成BST相关的知识,希望对你有一定的参考价值。
描述
给定一个从小到大排序的序列,将其转换成一棵二叉搜索树。
BST定义:
二叉搜索树,又称为二叉排序树,它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
二叉树节点定义如下:
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
题目部分代码已经完成,您只需要补充并提交以下函数:
struct TreeNode* sortedArrayToBST(int* nums, int numsSize);
输入
输入数据第一行为整数n(n<=100),表示节点数目。
第二行有n个整数,表示节点元素值。
输出
将有序序列转换成一棵二叉搜索树。
并对其进行中序遍历输出。
样例输入
5
1 2 3 4 5
样例输出
1 2 3 4 5
#include<bits/stdc++.h> using namespace std; struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; }; struct TreeNode*createBST(struct TreeNode*root,int x) { if(!root) { root=(struct TreeNode*)malloc(sizeof(struct TreeNode)); root->val=x; root->left=NULL; root->right=NULL; return root; } else if(x > root->val) { root->right=createBST(root->right,x); return root; } else { root->left=createBST(root->left,x); return root; } } struct TreeNode* sortedArrayToBST(int* nums, int numsSize) { int i; struct TreeNode*root=NULL; for(i=0;i<numsSize;i++) root=createBST(root,nums[i]); return root; } void in(TreeNode*root) { if(root) { in(root->left); printf("%d ",root->val); in(root->right); } } int main() { int n,i,num[105]; cin>>n; for(i=0;i<n;i++) scanf("%d",&num[i]); in(sortedArrayToBST(num,n)); cout<<endl; return 0; }
以上是关于TOJ 5438数据结构实验:生成BST的主要内容,如果未能解决你的问题,请参考以下文章