剑指Offer [04] 重建二叉树
2017-08-21 19:57
330 查看
重建二叉树 : 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {4,7,2,1,5,3,8,6},则重建二叉树并返回。
思路:
前序遍历的第一个点一定是根节点
中序遍历中,根节点左边为其左子树,右边为其右子树
注意点:
递归调用过程中函数的参数值,应该多举例验证下是否正确
思路:
前序遍历的第一个点一定是根节点
中序遍历中,根节点左边为其左子树,右边为其右子树
注意点:
递归调用过程中函数的参数值,应该多举例验证下是否正确
package A04重建二叉树; public class Solution { public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public TreeNode reConstructBinaryTree(int[] pre, int[] in) { TreeNode root = cal(pre, 0, pre.length-1, in, 0, in.length-11); return root; } public TreeNode cal(int[] pre,int preStart,int preEnd,int[] in,int inStart,int inEnd){ // 循环终止条件 if (preStart > preEnd || inStart > inEnd) { return null; } // 此时的根节点 TreeNode root = new TreeNode(pre[preStart]); for(int i=inStart;i<=inEnd;i++){ // 找到根节点在中序遍历中的索引 if (pre[preStart] == in[i]) { // 左孩子,在前序遍历中,起点将比根节点索引大 1 ,终点将是 i 的偏移位数 - 1 root.left = cal(pre, preStart+1, preStart+i-inStart, in, inStart, i-1); root.right = cal(pre, i-inStart+preStart+1, preEnd, in, i+1, inEnd); } } return root; } }
相关文章推荐
- 《剑指offer》-04重建二叉树
- 剑指offer_04_重建二叉树
- 《剑指offer》-重建二叉树
- 剑指Offer:面试题6 重建二叉树
- 《剑指Offer》面试题6 重建二叉树——勘误
- JAVA实现重建二叉树(《剑指offer》)
- 《剑指offer》根据先序序列与中序序列重建二叉树-Java
- 剑指Offer(4)重建二叉树
- 重建二叉树——剑指offer
- (剑指Offer)面试题6:重建二叉树
- 《剑指offer》面试题6 重建二叉树
- 剑指offer-面试题6.重建二叉树
- 剑指Offer_06 根据前序遍历和中序遍历序列 重建二叉树
- 牛客网-《剑指offer》-重建二叉树
- 《剑指Offer》 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 剑指offer《面试题6:重建二叉树》
- 剑指Offer编程练习004——重建二叉树
- 剑指offer—重建二叉树
- 剑指Offer(四)重建二叉树
- 剑指offer--重建二叉树[根据二叉树的先序、中序遍历结果重建二叉树]