已知前序遍历和中序遍历重建二叉树
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; }
相关文章推荐
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 根据后序和中序遍历重建二叉树
- 已知前序遍历和中序遍历,重建二叉树
- 每日一题之由前序遍历和中序遍历重建二叉树
- 输入前序/后序+中序 遍历结果重建二叉树(递归)
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 根据后序和中序遍历重建二叉树
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 二叉树的遍历;前序 中序 后序遍历二叉树;递归 非递归实现; 重建二叉树;编程之美重建二叉树
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 由前序遍历和中序遍历重建二叉树和C语言模式实现C++继承和多态——题集(十四)
- 根据前序遍历和中序遍历重建二叉树
- 由前序和中序遍历序列重建二叉树
- 根据前序遍历和中序遍历重建二叉树
- 由前序遍历数组和中序遍历数组重建二叉树
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 剑指:由前序遍历和中序遍历重建二叉树
- 前序遍历和中序遍历重建二叉树
- 根据前序遍历和中序遍历重建二叉树