重建二叉树
来源:互联网 发布:王晓东视频 算法 编辑:程序博客网 时间:2024/06/06 08:26
问题描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
解题思路:
前序遍历中的每一个元素都是它所在的子树的根,可以根据前序遍历来将中序划分。
前序遍历中,第一个是1,则1为根节点。在中序遍历中,可以划分为{4,7,2}{1}{5,3,8,6},{4,7,2}为左子树,{5,3,8,6}为右子树,然后再同样继续划分,可以重建成为二叉树。这里运用了递归的思想,虽然我有思路但是还是不会写代码,还是需要多加练习多学习。
下面是ac通过了的代码:
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; } 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; }}
阅读全文
1 0
- 3.9重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 二叉树的重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- Permutations II
- mongodb2.6数据导出导入
- ArrayList删除指定索引数据
- 风口上的风险 共享单车产品安全问题解决方案
- Java虚拟机学习记录,HotSpot对象创建
- 重建二叉树
- java字符追加问题
- C++ SDL学习之路 3rd —— 没法关闭SDL窗口?用事件列表!
- MySQL日志文件
- 文章标题
- 详解Gson使用(一)简单对象转化
- UCOSII软件定时器
- java字符串包含问题
- Spring Boot 初探之JSP