標籤:
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[0]為root,以此分別劃分出inorderLeft、preorderLeft、inorderRight、preorderRight四個數組,然後root.left=buildTree(preorderLeft,inorderLeft); root.right=buildTree(preorderRight,inorderRight)
JAVA實現如下:
public TreeNode buildTree(int[] preorder, int[] inorder) {if (preorder.length == 0 || preorder.length != inorder.length)return null;TreeNode root = new TreeNode(preorder[0]);int index = 0;for (int i = 0; i < inorder.length; i++)if (inorder[i] == root.val) {index = 0;break;}int[] inorderLeft = new int[index], preorderLeft = new int[index];int[] inorderRight = new int[inorder.length - 1 - index], preorderRight = new int[inorder.length- 1 - index];Set<Integer> inorderLeftSet=new HashSet<Integer>();for (int i = 0; i < inorderLeft.length; i++){inorderLeft[i] = inorder[i];inorderLeftSet.add(inorder[i]);}for (int i = 0; i < inorderRight.length; i++)inorderRight[i] = inorder[index + i + 1];int j = 0, k = 0;for (int i = 0; i < preorder.length; i++) {if(inorderLeftSet.contains(preorder[i]))preorderLeft[j++]=preorder[i];else if(preorder[i]!=root.val)preorderRight[k++]=preorder[i];}if(buildTree(preorderLeft,inorderLeft)!=null) root.left=buildTree(preorderLeft,inorderLeft);if(buildTree(preorderRight,inorderRight)!=null) root.right=buildTree(preorderRight,inorderRight);return root;}
結果:Time Limit Exceeded
解題思路二:
Java for LeetCode 105 Construct Binary Tree from Preorder and Inorder Traversal