天天看点

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;
        
    }
}