您的位置:首页 > 理论基础 > 数据结构算法

已知前序遍历和中序遍历重建二叉树

2016-10-09 22:41 260 查看
数据结构的作业题,题目用了一种奇怪的表述,但他的本质就是根据前序遍历和中序遍历重建二叉树再进行后序遍历。博主百思不得其解,百了一度才明白做法,现记之。

Tree reBuildTree (ElementType preOrder[],ElementType inOrder[],int n)
{
if(n<=0) return NULL; //如果没有元素,返回空指针;
Tree root = (Tree)malloc(sizeof(struct TreeNode));
root->Element=preOrder[0];//前序遍历的第一个元素就是根节点的值
int i;
for(i=0;i<n;i++)
{
// 在中序遍历中寻找根节点的位置
if(inOrder[i]==preOrder[0]) break;

}
//在中序遍历中i左边的元素是左子树中序遍历的结果
//同理i右边的是右子树中序遍历的结果
//在前序遍历中根节点(preOrder[0])之后的i个元素属于左子树的遍历结果
//接下来只需要递归调用重建左右子树即可
root->Left=reBuildTree(preOrder+1,inOrder,i);
root->Right=reBuildTree(preOrder+1+i,inOrder+i+1,n-i-1);
return root;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树 数据结构
相关文章推荐