Given preorder and inorder traversal of a tree, construct the binary tree.

题目:利用先序遍历和中序遍历,构造一个二叉树!

例如:

Inorder Traversal:{3,1,7,4,0,5,8,2,6};
Preorder Traversal:{0,1,3,4,7,2,5,8,6};

思路:

1. 先序数组第一个元素为根节点(root);(上例中 root.val= 0)

2. 以root为中心,中序数组分成两个子数组,即为root的左右子树!(上例中分为:subLeft={3,1,7,4}、subRight={5,8,2,6})

3. 在先序序列中 找到对应subLeft在先序数组中的子数组subPreLeft = {1,3,4,7}、

   subRight在先序数组中的字数组subPreRight= {2,5,8,6}

4. 在subPreLeft中的首元素为root.left;

    在subPreRight中的首元素为root.right;

循环上面4个步骤,建立tree!

对应代码:

public static TreeNode buildTreePure(int[] inorder, int[] preorder) {
		if(inorder.length <= 0 && inorder.length != preorder.length) return null;
		int inLeft = 0, preLeft = 0,length = inorder.length;
		TreeNode root = building(inLeft, preLeft, length, inorder, preorder);
        return root;
	}
	
	public static TreeNode building(int inLeft, int preLeft, int length, int[] myIn, int[] myPre){
		if(length>0 && preLeft>=0 && preLeft=0 && inLeft




你可能感兴趣的:(algorithm)