根据前序遍历来构造二叉树,根据中序遍历来限定左右子树的范围
代码
public TreeNode buildTree(int[] preorder, int[] inorder) { return buildTree(preorder, 0, preorder.length - 1, inorder, 0, inorder.length); } private TreeNode buildTree(int[] preorder, int pStart, int pEnd, int[] inorder, int iStart, int iEnd) { if (pStart > pEnd) return null; TreeNode root = new TreeNode(preorder[pStart]); int i, range; for (i = iStart; i < iEnd; i++) { if (inorder[i] == preorder[pStart]) break; } range = i - iStart; root.left = buildTree(preorder, pStart + 1, pStart + range, inorder, iStart, i); root.right = buildTree(preorder, pStart + range + 1, pEnd, inorder, i + 1, iEnd); return root; }
从前序与中序遍历序列构造二叉树