剑指offer-重建二叉树 由前序和中序遍历序列建树
来源:互联网 发布:淘宝店lol代练哪家可靠 编辑:程序博客网 时间:2024/05/16 11:16
重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int [] in) { TreeNode root=reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1); return root; } 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; }}
下面这种方式提示栈溢出
Exception in thread “main” java.lang.StackOverflowError
at BinaryTreeSearch.reConstructBinaryTree(BinaryTreeSearch.java:49)
public TreeNode reConstructBinaryTree(int [] pre,int [] in) { if(pre == null || pre.length == 0) { return null; } int len = pre.length; //前序遍历的第一个元素即根节点 TreeNode root = new TreeNode(pre[0]); //分别用于用于存储左子树和右子数的前序遍历和中序遍历序列 int[] lpre= new int[len]; int[] lin = new int[len]; int [] rpre=new int[len]; int[] rin=new int[len]; //中序遍历的根所在的位置middle int middle = 0; for(int i =0;i<len;i++) { if(in[i]==pre[0]) { middle = i; break; } } //左子树 for(int i = 0;i<middle;i++) { lpre[i] = pre[i+1]; lin[i] = in[i]; } //右子树 for(int i = middle+1;i<len;i++) { rpre[i] = pre[i]; lin[i] = in[i]; } root.left = reConstructBinaryTree(lpre,lin); root.right = reConstructBinaryTree(rpre,rin); return root; }
阅读全文
1 0
- 剑指offer-重建二叉树 由前序和中序遍历序列建树
- 剑指offer 6---由前序遍历和中序遍历重建二叉树
- 由前序遍历序列和中序遍历序列重建二叉树
- 重建二叉树(前序,中序序列建树)
- 剑指offer 重建二叉树-前序遍历和中序遍历重建
- 由前序遍历和中序遍历重建二叉树(前序序列:1 2 3 4 5 6
- 剑指:由前序遍历和中序遍历重建二叉树
- (剑指offer笔记)根据前序遍历和中序遍历重建二叉树
- 【二叉树】由前序遍历和中序遍历重建二叉树
- 二叉树--由前序遍历和中序遍历重建二叉树
- 剑指Offer_06 根据前序遍历和中序遍历序列 重建二叉树
- 由前序遍历和中序遍历重建二叉树,再实现后续遍历
- 由二叉树的前序遍历序列和中序遍历序列求后序遍历序列
- 【面试题】剑指Offer-6-根据前序和中序遍历重建二叉树
- 根据前序遍历序列和中序遍历序列重建二叉树
- 根据前序遍历序列和中序遍历序列重建二叉树
- 由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- js数组去重
- C++的继承和多态
- Microsoft.Common.targets(2401,5): error MSB6006: “LC.exe”已退出,代码为 -1
- 静态嵌套类
- 关系型数据库的设计范式 1NF 2NF 3NF BCNF
- 剑指offer-重建二叉树 由前序和中序遍历序列建树
- ant自动化使用和技巧
- 自动抛出异常的应用
- 学生成绩等级
- 【BZOJ2125】【仙人掌】最短路 题解
- fseek
- 顺序栈
- Win10开启IPv6
- 20171101-程序员的自我修养