重建二叉树
2017-01-12 11:59
281 查看
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。Java Code
public class RebuildTree { public static void main(String[] args) { int[] pre = {1,2,4,7,3,5,6,8}; int[] in = {4,7,2,1,5,3,8,6}; TreeNode root = SolutionOne.reConstructBinaryTree(pre,in); SolutionOne.Traverse(root); System.out.println(); } } class SolutionOne { public static TreeNode reConstructBinaryTree(int [] pre,int [] in) { return reBuildBinaryTree(pre,in,0,pre.length-1,0,in.length-1); } public static TreeNode reBuildBinaryTree(int[] pre,int [] in,int preLeft,int preRight,int inLeft,int inRight) { if(preLeft > preRight || inLeft > inRight) return null; TreeNode root = new TreeNode(pre[preLeft]); for(int pos = inLeft; pos<= inRight; pos++) { if(in[pos] == root.val){ root.left = reBuildBinaryTree(pre,in,preLeft+1,preLeft+pos-inLeft,inLeft,pos-1); root.right = reBuildBinaryTree(pre,in,preLeft+pos+1-inLeft,preRight,pos+1,inRight); } } return root; } public static void Traverse(TreeNode root) { if(root == null) return; Traverse(root.left); System.out.print(root.val + " "); Traverse(root.right); } } class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x){ val = x; } }
注意要注意代码中pos表示的含义,之前一直没有成功是因为将preLeft+pos-inLeft写成了preLeft+pos,并没有减去inLeft
相关文章推荐
- 重建二叉树(面试题 6)
- 【剑指offer】先序、中序遍历结果重建二叉树
- 剑指offer 重建二叉树
- 剑指offer面试题5-从尾到头打印链表/6-重建二叉树
- 剑指offer 之 重建二叉树
- 重建二叉树
- 中序后序重建二叉树
- 重建二叉树与二叉树的层次遍历
- 剑指offer——重建二叉树
- [leetcode]重建二叉树(先序和终须) 中序遍和后续
- 剑指Offer算法题之已知两种遍历方式重建二叉树--面试题6:重建二叉树
- 重建二叉树
- 剑指offer---重建二叉树
- 剑指offer 重建二叉树-前序遍历和中序遍历重建
- 《剑指Offer》面试题六之重建二叉树
- 剑指offer:重建二叉树(Python)
- 【剑指Offer】重建二叉树
- (php实现剑指offer)重建二叉树
- 剑指Offer之重建二叉树
- 重建二叉树