1. 程式人生 > >Construct Binary Tree from Inorder and Postorder Traversal

Construct Binary Tree from Inorder and Postorder Traversal

使用遞歸 while and start 恢復 pos 思想 pan 後序

題目

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

Note:
You may assume that duplicates do not exist in the tree.

方法

依據樹的中序遍歷和後序遍歷,來恢復樹,使用遞歸的思想。

	TreeNode getTree(int[] inorder, int inStart, int inEnd, int[] postorder, int postStart, int postEnd) {
		if (inStart >= inEnd) {
			return null;
		}
		int cur = postorder[postEnd - 1];
		TreeNode root = new TreeNode(cur);
		int i = 0;
		int j = inStart;
		while(inorder[j] != cur) {
			j++;
			i++;
		}
		
		
		root.left = getTree(inorder, inStart, inStart + i, postorder, postStart, postStart + i);
		root.right = getTree(inorder, inStart + i + 1, inEnd, postorder, postStart + i, postEnd - 1);
		
		return root;
	}
    public TreeNode buildTree(int[] inorder, int[] postorder) {
    	if (inorder == null) {
    		return null;
    	}
    	int len = inorder.length;
    	return getTree(inorder, 0, len, postorder, 0, len);
    }


Construct Binary Tree from Inorder and Postorder Traversal