天天看點

LeetCode—105. Construct Binary Tree from Preorder and Inorder Traversal

LeetCode—105. Construct Binary Tree from Preorder and Inorder Traversal

題目

根據前序周遊和中序周遊建立二叉樹。注意二叉樹中沒有重複的數字。

LeetCode—105. Construct Binary Tree from Preorder and Inorder Traversal

思路及解法

根據前序周遊和中序周遊的特點,通過前序周遊清單确定根節點,在中序周遊的清單裡找出根節點,左邊就是左子樹,右邊就是右子樹,中序周遊清單确定左子樹和右子樹的長度,實際在遞歸過程中,傳遞的是左右子樹的開始和終止節點

代碼

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        return helper(preorder, inorder, 0, preorder.length-1, 0, inorder.length-1);
    }
    public TreeNode helper(int[] preorder, int[] inorder, int preStart, int preEnd, int inStart, int inEnd){
        if(preStart>preEnd || inStart>inEnd) return null;
        TreeNode node = new TreeNode(preorder[preStart]);
        int index=0;
        for(int i=inStart; i<=inEnd; i++){
            if(preorder[preStart]==inorder[i]){
                index = i;
                break;
            }
        }
        node.left=helper(preorder, inorder, preStart+1, preStart+index-inStart, inStart, index-1);
        node.right=helper(preorder, inorder, preStart+index-inStart+1, preEnd, index+1, inEnd);
        return node;
        
    }
}