题目:
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
思路:
递归,preorder的第一个元素必然是根节点
package treetraversal; public class ConstructBinaryTreeFromPreorderAndInorderTraversal { public TreeNode buildTree(int[] preorder, int[] inorder) { return construct(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1); } private TreeNode construct(int[] preorder, int pstart, int pend, int[] inorder, int istart, int iend) { if (pstart > pend || istart > iend) return null; int rootVal = preorder[pstart]; int index = -1; for (int i = istart; i <= iend; ++i) { if (inorder[i] == rootVal) { index = i; break; } } TreeNode root = new TreeNode(rootVal); root.left = construct(preorder, pstart + 1, index - istart + pstart, inorder, istart, index - 1); root.right = construct(preorder, index - istart + pstart + 1, pend, inorder, index + 1, iend); return root; } }
LeetCode - Construct Binary Tree from Preorder and Inorder Traversal
原文:http://www.cnblogs.com/shuaiwhu/p/5118067.html