leetcode学习笔记15

105. Construct Binary Tree from Preorder and Inorder Traversal

在这里插入图片描述
1、原始代码

class Solution {
    	public  TreeNode buildTree(int[] preorder, int[] inorder) {
		
		return buildTree(preorder, inorder, 0,0,inorder.length-1);
	}
	public  TreeNode buildTree(int[] preorder, int[] inorder, int rootIndex,int inStart,int inEnd) {
		if (inStart>inEnd|| rootIndex>= preorder.length) {
			return null;
		}
		TreeNode root=new TreeNode(preorder[rootIndex]);
		int index = 0;
		for(int i=inStart;i<=inEnd;i++) {
			if(inorder[i]==root.val) {
				index=i;
				break;
			}		
		}
		root.left = buildTree(preorder,inorder,++rootIndex,inStart,index-1);
		root.right = buildTree(preorder, inorder, rootIndex+=index-inStart,index+1,inEnd);
		return root;
	}
}

2、使用HashMap,便于查找,只要遍历一次inorder

class Solution {
        HashMap<Integer,Integer> hm=new HashMap<Integer,Integer>();
    	public  TreeNode buildTree(int[] preorder, int[] inorder) {
            
        for(int i=0;i<inorder.length;i++){
            hm.put(inorder[i],i);
        }		
		return buildTree(preorder, inorder, 0,0,inorder.length-1);
	}
	public  TreeNode buildTree(int[] preorder, int[] inorder, int rootIndex,int inStart,int inEnd) {
		if (inStart>inEnd|| rootIndex>= preorder.length) {
			return null;
		}
		TreeNode root=new TreeNode(preorder[rootIndex]);
		int index = hm.get(root.val);
		root.left = buildTree(preorder,inorder,++rootIndex,inStart,index-1);
		root.right = buildTree(preorder, inorder, rootIndex+=index-inStart,index+1,inEnd);
		return root;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_38941866/article/details/84961680