码迷,mamicode.com
首页 > 编程语言 > 详细

Java for LeetCode 105 Construct Binary Tree from Preorder and Inorder Traversal

时间:2015-05-23 11:11:46      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!