算法:二叉树的重建
来源:互联网 发布:sql 多个结果合并 编辑:程序博客网 时间:2024/05/22 03:08
首先前序遍历特性,根节点在第一个,然后后面是左子树,然后是右子树。
而中序遍历,首先出现的是左子树,然后是根节点,然后是右子树。
然后就可以用递归方法,将前序遍历的第一个数值和中序遍历比较,找到中序遍历中的根节点。中序遍历中的该节点左边为左子树,右边为右子树。再用同样的方法找到左右子树的根节点,依次递归
/** * 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) { TreeNode root=reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1); return root; } /* * * @param PreOrder * 前序遍历序列 * @param startPreIndex * 前序序列开始位置 * @param endPreIndex * 前序序列结束位置 * @param InOrder * 中序遍历序列 * @param startInIndex * 中序序列开始位置 * @param endInIndex * 中序序列结束位置 */ 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); //递归 // 前序遍历中:下一个的左树的根节点是前序遍历数组的第二个,结束位置是(i-中序开始+前序开始) // 中序遍历中:下个左树的根节点是开始,结束是i-1 root.right=reConstructBinaryTree( pre,i-startIn+startPre+1,endPre,in,i+1,endIn); //前序遍历中: 右树的根节点是前序遍历数组的第(i+1-中序开始+前序开始)结束位置是前序结尾 //中序遍历中:右树是i+1----结尾 } } return root; }}
public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }
阅读全文
0 0
- 算法:二叉树的重建
- 算法-重建二叉树
- 算法-重建二叉树
- 算法题目-二叉树的重建
- 【算法题】重建二叉树
- 算法题目---重建二叉树
- 算法题/重建二叉树
- 二叉树的重建
- 二叉树的重建!!!
- 二叉树的重建
- 二叉树的重建
- 二叉树的重建
- 二叉树的重建
- 二叉树的重建
- 二叉树的重建
- 二叉树的重建
- 二叉树的重建,遍历,求深度算法
- 重建二叉树的思路
- python3.4 安装 pycrypto
- Java中GUI——JTable中鼠标监听的添加
- 你必须了解的RecyclerView的五大开源项目-解决上拉加载、下拉刷新和添加Header、Footer等问题
- lucene-day01
- (正则表达式)各种验证文本框输入格式
- 算法:二叉树的重建
- webstorm全局搜索快捷键没用问题
- 新手上路系列2:表达式与流程控制
- Spring Data Redis 进一步认识
- 对于代理的印象
- Android提醒技巧,Dialog、Toast和Snackbar
- css元素水平放置
- 原生DOM操作汇总
- ubuntu 安装离线mysql