二叉树操作合集

定义二叉树的结点类型

struct TreeNode{
    int val;
    TreeNode *left;
    TreeNode *right;
};
层次遍历建树

层次遍历建树

TreeNode*create()
{
    int front=1,rear=0,x;
    TreeNode*qu[1005],*t,*root=NULL;
    while(cin>>x,x!=-1)
    {
        if(!x)
            t=NULL;
        else
        {
            t=new TreeNode;
            t->val=x;
            t->left=NULL;
            t->right=NULL;
        }
        qu[++rear]=t;
        if(rear==1)
            root=t;
        else
        {
            if(qu[front]&&t)
            {
                if(rear%2==0)
                    qu[front]->left=t;
                else
                    qu[front]->right=t;
            }
            if(rear%2==1)
                front++;
        }
    }
    return root;
}

二叉搜索树的建树

ps:

二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
① 若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
② 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
③ 左、右子树也分别为二叉排序树;

TreeNode*dfsBST(TreeNode*root,int x)
{
    if(!root)
    {
        root=new TreeNode;
        root->val=x;
        root->left=NULL;
        root->right=NULL;
    }
    else if(x> root->val)
        root->right=dfsBST(root->right,x);
        
    else if(x<= root->val)  //其实没有=的情况 
        root->left=dfsBST(root->left,x);
        
    return root;
}
TreeNode*createBST()
{
    int nums[1005],Size,i;
    cin>>Size;
    for(i=0;i<Size;i++)
        cin>>nums[i];
        
    TreeNode*root=NULL;
    for(i=0;i<Size;i++)
        root=dfsBST(root,nums[i]);
    return root;
}

猜你喜欢

转载自www.cnblogs.com/kannyi/p/9077357.html