1. 程式人生 > >[LeetCode] 根據前序序列和中序序列重建二叉樹

[LeetCode] 根據前序序列和中序序列重建二叉樹

思路:

1、根據先序向量陣列的值把中序向量陣列一分為二,然後遞迴左右部分;
2、設定全域性 index 索引,作為先序遍歷向量的下標,每次遞迴左子樹之後減一。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    private int index = -1 ;
	public TreeNode buildTree(int[] preorder, int[] inorder) {
        return btConstruct(preorder, inorder, 0, preorder.length - 1) ;
    }
	
	public TreeNode btConstruct(int[] preorder, int[] inorder, int l, int r) {
		index ++ ;
		if(l > r || r > preorder.length) {
			return null ;
		}
		
		TreeNode root = new TreeNode(preorder[index]) ;
		int j ;
		for(j = l; j <= r; j ++) {
			if(preorder[index] == inorder[j]) {
				break ;
			}
		}
		
		if(j <= r) {
			root.left = btConstruct(preorder, inorder, l, j - 1) ;
			index -- ;
			root.right = btConstruct(preorder, inorder, j + 1, r) ;
		}
		
		return root ;
	}
}