重建二叉树

来源:互联网 发布:怎样开发app软件 编辑:程序博客网 时间:2024/06/03 22:03
题目描述:

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。如果题目中所给的前序和中序遍历序列不能构成一棵二叉树,则输出”No”。



给出中序和前序我们可以用递归的方式重建二叉树


代码如下:<span style="font-size:18px;">BiNode *buildTree(int *pre,int *inorder,int n)//n表示个数{    if(n==0)    return NULL;    BiNode * root=new BiNode;    int rdata=pre[0];    root->data=rdata;//前序的第一个是根节点    root->lchild=NULL;    root->rchild=NULL;    int i;    for(i=0;i<n;i++)    {        if(inorder[i]==rdata)//表示找到了根结点        break;    }    if(i==n)//表示没有找到。    {        f++;        return NULL;    }        //左子树个数为i个,右了子树个数是n-i-1;    if(i>0)    root->lchild=buildTree(pre+1,inorder,i);    if(n-1-i>0)    root->rchild=buildTree(pre+i+1,inorder+i+1,n-1-i);    return root;    }</span>



1 0
原创粉丝点击