输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode reConstructBinaryTree(int[] pre, int[] in) { if(pre.length == 0 ||in.length == 0) return null; return ConstructBinaryTree(pre, 0, pre.length-1, in, 0, in.length - 1); } public TreeNode ConstructBinaryTree(int[] pre, int pstart, int pend, int[] in, int istart, int iend){ if(pstart > pend || istart > iend) return null; TreeNode root = new TreeNode(pre[pstart]); for(int i = istart; i <= iend; i++){ if(in[i] == pre[pstart]){ root.left = ConstructBinaryTree(pre, pstart+1, pstart + i - istart, in, istart, i - 1); root.right = ConstructBinaryTree(pre, pstart + i - istart + 1, pend, in, i + 1, iend); break; } } return root; } }
原文:https://www.cnblogs.com/MiaoPlus/p/10725290.html