每天一道算法题——重建二叉树
来源:互联网 发布:无人机模拟器软件 编辑:程序博客网 时间:2024/05/22 03:25
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
测试用例:
[1,2,3,4,5,6,7],[3,2,4,1,6,5,7]
对应输出应该为:
{1,2,5,3,4,6,7}
源码:
public class Test1 { class TreeNode {//定义二叉树类,以表示二叉树结构。 int val; TreeNode left; TreeNode right; TreeNode(int x){val = x;}} public TreeNode reConstructBinaryTree(int [] pre,int [] in) { TreeNode root=reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1);//调用重载的reConstructBinary方法 return root; } // 前序遍历{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6} //pre[]前序遍历的数组,int[]中序遍历的数组 //startPre代表此次前序遍历到的第一个数 endPre代表此次前序遍历到的最后一个数 //startIn代表此次中序遍历到的第一个数 endIn代表此次中序遍历到的最后一个数 private TreeNode reConstructBinaryTree(int[] pre, int startPre, int endPre, int[] in, int startIn, int endIn) { if (startPre > endPre || startIn > endIn) return null;//排除输入错误的情况 TreeNode root = new TreeNode(pre[startPre]);//创建一个新的二叉树 for (int i = startIn; i <= endIn; i++) if (in[i] == pre[startPre]) {//找到根节点 root.left = reConstructBinaryTree(pre, startPre + 1, startPre + i - startIn, in, startIn, i - 1);//递归调用,建立左子树 root.right = reConstructBinaryTree(pre, i - startIn + startPre + 1, endPre, in, i + 1, endIn);//递归调用,建立右子树 } return root; }}
运行时间
219ms
阅读全文
0 0
- 每天一道算法题——重建二叉树
- 每天一道算法题——每天一道算法题
- 每天一道算法题(38)——二叉树的非递归遍历
- 每天一道算法题——二叉树的镜像
- 每天一道算法题——汉诺塔
- 每天一道算法题——
- 每天一道算法题目(17)——二叉树的子结构
- 每天一道算法题——树的子结构
- 面试算法—重建二叉树
- 每天一个算法之根据前序中序序列重建二叉树
- 【算法题】重建二叉树
- 算法题/重建二叉树
- 【每天一道算法题】
- 【每天一道算法题】
- 【每天一道算法题】
- 每天一道算法题(5)——判断整数序列是否是二叉查找树后序遍历结果
- 算法-重建二叉树
- 算法-重建二叉树
- ubuntu+virtualbox+winn10系统共享文件夹
- Opencv1、Opencv2 拍照片、写视频
- MYIR-ZYNQ7000系列-zturn教程(9):将bit文件固化到QSPI_Flash
- ThinkPHP3.2.3的数据分页
- oracle启动/关闭过程
- 每天一道算法题——重建二叉树
- leetcode 第七题:Reverse Integer
- LeetCode目录。
- Git基础教程
- 回调函数(CallBack)
- 数据分析之《菜鸟侦探挑战数据分析》-3-R语言-散点图,相关系数,回归线
- leetcode---wildcard-matching---字符串,dp
- Node gs
- strtok与位运算