剑指offer—重建二叉树
2017-12-06 10:25
375 查看
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
思路:思路比较简单,利用递归,前序遍历序列的首元素是中序遍历序列的中间元素将中序遍历序列分成左右两部分,通过中序遍历序列左右两部分的元素个数推断其对应的前序序列,本题关键代码是图中加粗部分代码,耐心一点,仔细推导
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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) { if(pre==null || in==null) return null; return reConstructBinaryTreeCore(pre,in,0,pre.length-1,0,in.length-1); } private TreeNode reConstructBinaryTreeCore(int[] pre,int[] in, int preStart,int preEnd,int inStart,int inEnd){ if(preStart>preEnd || inStart>inEnd) return null; int temp = inStart; TreeNode treeNode = new TreeNode(pre[preStart]); while(temp<in.length && pre[preStart]!=in[temp]) temp++; treeNode.left = **reConstructBinaryTreeCore(pre,in,preStart+1,preStart+temp-inStart,inStart,temp-1); treeNode.right = reConstructBinaryTreeCore(pre,in,preStart+temp+1-inStart,preEnd,temp+1,inEnd)**; return treeNode; } }
思路:思路比较简单,利用递归,前序遍历序列的首元素是中序遍历序列的中间元素将中序遍历序列分成左右两部分,通过中序遍历序列左右两部分的元素个数推断其对应的前序序列,本题关键代码是图中加粗部分代码,耐心一点,仔细推导
相关文章推荐
- 剑指Offer面试题:5.重建二叉树
- 《剑指Offer》读书笔记04:重建二叉树
- JAVA实现重建二叉树(《剑指offer》)
- 剑指offer编程题Java实现——面试题6重建二叉树
- 《剑指offer》编程题java实现(二十六):重建二叉树(两种方法)
- 剑指Offer [04] 重建二叉树
- 剑指offer面试题6:重建二叉树
- 剑指offer第6题 二叉树重建 九度OJ1385
- 重建二叉树 剑指offer
- 剑指offer系列之四:重建二叉树
- 《剑指Offer》面试题-重建二叉树
- 重建二叉树-剑指offer
- 剑指offer——重建二叉树
- 《剑指Offer_编程题》详解重建二叉树
- 剑指offer-面试题6.重建二叉树
- 《剑指offer》问题7 重建二叉树 Java实现
- 剑指Offer_06 根据前序遍历和中序遍历序列 重建二叉树
- (剑指offer)重建二叉树
- 《剑指offer》面试题6:重建二叉树
- 剑指Offer学习之面试题6 :重建二叉树