树——由中序和前序,中序和后序序列重建二叉树
来源:互联网 发布:java手机游戏培训 编辑:程序博客网 时间:2024/05/22 12:27
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
假设输入中都不含重复的数字。
例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
一、由前序和中序重构
代码如下:
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int [] in) { if(pre==null||in==null||pre.length!=in.length) return null; return helper(pre,0,pre.length-1,in,0,in.length-1); } public TreeNode helper(int []pre,int prelow,int prehigh,int[] in,int inlow,int inhigh) { if(prelow>prehigh||inlow>inhigh) return null; TreeNode root=new TreeNode(pre[prelow]); int i=inlow; for(;i<inhigh&&in[i]!=root.val;i++); root.left=helper(pre,prelow+1,prelow+i-inlow,in,inlow,i-1);//一般做错就是下标搞错了; root.right=helper(pre,prelow+i-inlow+1,prehigh,in,i+1,inhigh); return root; }}
二、由后序和中序重构
代码如下:
public class Solution { public TreeNode buildTree(int[] inorder, int[] postorder) { if(inorder == null||postorder == null||inorder.length == 0||inorder.length!=postorder.length) return null; return build_Tree(inorder,0,inorder.length-1,postorder,0,postorder.length-1); } public TreeNode build_Tree(int[] inorder,int inbegin,int inend,int[] postorder,int postbegin,int postend) { if(inbegin>inend||postbegin>postend) return null; int root_val=postorder[postend]; TreeNode root=new TreeNode(root_val); int index=inbegin; for(;inorder[index]!=root_val;index++) { } //计算index时要仔细; root.left=build_Tree(inorder,inbegin,index-1,postorder,postbegin,postbegin+index-inbegin-1); root.right=build_Tree(inorder,index+1,inend,postorder,postbegin+index-inbegin,postend-1); return root; }}
0 0
- 树——由中序和前序,中序和后序序列重建二叉树
- Java实现由前序序列和中序序列重建二叉树,并后序输出。
- 由前序遍历序列和中序遍历序列重建二叉树
- 由前序和中序数组重建二叉树
- 剑指offer-重建二叉树 由前序和中序遍历序列建树
- 由中序和后序重建二叉树
- 根据前序和中序序列重建二叉树
- 前序和中序序列重建二叉树
- 根据前序和中序列 重建二叉树
- 由前序遍历和中序遍历重建二叉树(前序序列:1 2 3 4 5 6
- 由前序和中序序列构建二叉树
- 【二叉树】由前序遍历和中序遍历重建二叉树
- 二叉树--由前序遍历和中序遍历重建二叉树
- 由中序与前序、中序与后序重建二叉树
- POJ 2255 根据二叉树的前序和中序序列来重建二叉树
- 根据二叉树的前序和中序序列来重建二叉树
- [LeetCode] 根据前序序列和中序序列重建二叉树
- 根据前序遍历序列和中序遍历序列重建二叉树
- zookeeper学习1
- spring实例化之底层实现原理
- 支付宝,微信,银联集成例子 (BUG是有的)
- 用C++进行简单的文件I/O操作
- 59. Spiral Matrix II
- 树——由中序和前序,中序和后序序列重建二叉树
- jquery之empty()与remove()区别
- Android 银行账号
- Git 常用命令大全
- 【算法作业】 循环赛问题 分治算法
- Three.js无法显示三维外部文件问题解决方案
- APUE,TLPI读书笔记——linux进程
- poj 2814 拨钟问题(枚举)
- 动态规划之最长递增子序列 最长不重复子串 最长公共子序列