标签:
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
标签:
原文地址:http://www.cnblogs.com/tonyluis/p/4523821.html