刷题之路----根据前序遍历和中序遍历或者后序遍历和中序遍历重建二叉树
来源:互联网 发布:linux 安装jdk gz 编辑:程序博客网 时间:2024/05/16 19:32
题目如下:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
如以下树
1
23
45 6 7
前序遍历:1.根节点
2.前序遍历左子树
3.前序遍历右子树
中序遍历:1.中序遍历左子树
2.根节点
3.中序遍历右子树
后序遍历:1.后序遍历左子树
2.后序遍历右子树
3.根节点
所以上方树的
前序遍历为{1, 2, 4, 5, 3, 6, 7}
中序遍历为{4, 2, 5, 1, 6, 3, 7}
后序遍历为{4, 5, 2, 6, 7, 3, 1}
Java代码如下:
public TreeNode reConstructBinaryTree(int [] pre,int [] mid) { TreeNode root = buildTree(pre, mid, 0, pre.length - 1, 0, pre.length - 1); return root; }public static TreeNode buildTree(int[] off, int[] mid, int begin1, int end1, int begin2, int end2) {if(begin1 > end1 || begin2 > end2) {return null;}//找到根节点int rootData = off[end1];TreeNode head = new TreeNode(rootData);//找到子树范围int incount = findIndex(rootData, mid, begin2, end2);int offset = incount - begin2 - 1;TreeNode left = buildTree(off, mid, begin1, begin1 + offset, begin2, begin2 + offset);TreeNode right = buildTree(off, mid, end1 - 1 - offset, end1 - 1, incount + 1, end2);head.left = left;head.right = right;return head;}//在中序遍历下寻找根节点public static int findIndex(int rootData, int[] mid, int begin2, int end2) {for(int i = begin2; i <= end2; i++) {if(mid[i] == rootData) {return i;}}return -1;}由后序遍历和中序遍历也能重建二叉树
Java代码如下:
public TreeNode reConstructBinaryTree(int [] off,int [] mid) { TreeNode root = buildTree(off, mid, 0, off.length - 1, 0, off.length - 1); return root; }public static TreeNode buildTree(int[] off, int[] mid, int begin1, int end1, int begin2, int end2) {if(begin1 > end1 || begin2 > end2) {return null;}//找到根节点int rootData = off[end1];TreeNode head = new TreeNode(rootData);//找到子树范围int incount = findIndex(rootData, mid, begin2, end2);int offset = incount - begin2 - 1;TreeNode left = buildTree(off, mid, begin1, begin1 + offset, begin2, begin2 + offset);TreeNode right = buildTree(off, mid, end1 - 1 - offset, end1 - 1, incount + 1, end2);head.left = left;head.right = right;return head;}//在中序遍历下寻找根节点public static int findIndex(int rootData, int[] mid, int begin2, int end2) {for(int i = begin2; i <= end2; i++) {if(mid[i] == rootData) {return i;}}return -1;}
0 0
- 刷题之路----根据前序遍历和中序遍历或者后序遍历和中序遍历重建二叉树
- 二叉树 根据前序遍历和中序遍历 或者 后序遍历和中序遍历建树
- 根据前序遍历(或者是后序遍历)和中序遍历得到的序列可以重建二叉树
- POJ 2255Tree Recovery 二叉树重建(根据前序遍历和中序遍历写出后序遍历)
- 根据中序和前序遍历重建二叉树
- 根据前序和中序遍历重建二叉树
- 前序遍历和中序遍历重建二叉树
- 前序遍历和中序遍历重建二叉树
- 根据前序遍历、中序遍历重建二叉树
- 根据后序和中序遍历重建二叉树
- 根据二叉树的前序遍历和中序遍历重建二叉树
- 根据二叉树的前序遍历和中序遍历的结果,重建二叉树
- 根据二叉树的前序遍历和中序遍历(或者中序遍历和后序遍历)还原二叉树
- 根据前序遍历和中序遍历,后序遍历和中序遍历重构二叉树
- 七:重建二叉树(根据先序遍历(或者后序遍历)和中序遍历重建二叉树)
- 根据前序遍历和中序遍历重建二叉树的Java实现
- (剑指offer笔记)根据前序遍历和中序遍历重建二叉树
- 027根据前序遍历和中序遍历,重建二叉树(keep it up)
- 数据库组合查询练习1
- 在spring mvc中实现JSR303验证并将验证结果传回给视图层
- java的File
- c++函数模板
- MVC模式
- 刷题之路----根据前序遍历和中序遍历或者后序遍历和中序遍历重建二叉树
- HDU 4542 小明系列故事——未知剩余系(反素数+最小的n使得n的约数为n-k(k已知))
- 二叉树层次遍历
- C++ set容器迭代器
- 堆排序java实现
- 如何开启ubuntu的SSH服务
- iOS定位从 “始终”定位,改变成“使用期间”定位
- java命令行生成jar包
- Codeforeces 27 E Number With The Given Amount Of Divisors(反素数)