《剑指Offer》 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
2017-09-29 10:48
447 查看
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。个人分析:
1 通过前序遍历拿到二叉树的根节点
2 找到根节点在中序遍历中的位置,确定二叉树的左右子树节点
3 通过遍历确定左右各子树的前序遍历和中序遍历
4 递归 重复上述步骤
public class Demo { public static TreeNode reConstructBinaryTree(int [] pre,int [] in) { // 递归出口 if(pre.length == 0 || in.length == 0 || pre.length != in.length) { return null; } // 拿到根结点 TreeNode root = new TreeNode(pre[0]); // 找的根结点在中序遍历中的位置 int i = 0; while(in[i] != root.val) { i++; } //确定左子树前序遍历长度 int[] preLeft = new int[i]; //确定左子树中序遍历长度 int[] inLeft = new int[i]; //确定右子树前序遍历长度 int[] preRight = new int[in.length - i -1]; //确定右子树中序遍历长度 int[] inRight = new int[in.length - i -1]; // 遍历 依次拿到左右子树 前中序遍历的值 for(int j = 0 ; j<in.length ;j++) { if(j < i) { preLeft[j] = pre[j+1]; inLeft[j] = in[j]; }else if(j > i) { preRight[j-i-1] = pre[j]; inRight[j-i-1] = in[j]; } } // 递归 root.left = reConstructBinaryTree(preLeft,inLeft); root.right = reConstructBinaryTree(preRight,inRight); return root; } //后序遍历 public static void last(TreeNode tr) { if(tr == null) { return ; } last(tr.left); last(tr.right); System.out.print(tr.val +" "); } public static void main(String[] args) { int[] a = {1,2,4,7,3,5,6,8}; int[] b = {4,7,2,1,5,3,8,6}; TreeNode root = reConstructBinaryTree(a,b); last(root); } } class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }
相关文章推荐
- 面试题6:重建二叉树,输入某二叉树的前序遍历和中序遍历的结果,重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- java 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 重建二叉树,输入某二叉树的前序遍历和中序遍历的结果,重建出二叉树,假设输入的前序和中序遍历结果中不含重复的数字
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 输入某二叉树的前序遍历和中序遍历的结果请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,重建该二叉树
- 输入某二叉树的前序遍历和中序遍历的结果,重建出该二叉树
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树
- 重建二叉树:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 输入某二叉树的前序遍历和中序遍历的结果,重建此二叉树。