【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;
}

猜你喜欢

转载自www.cnblogs.com/kannyi/p/9066605.html
今日推荐