1. 程式人生 > >Leetcode669.Trim a Binary Search Tree修建二叉樹

Leetcode669.Trim a Binary Search Tree修建二叉樹

給定一個二叉搜尋樹,同時給定最小邊界L 和最大邊界 R。通過修剪二叉搜尋樹,使得所有節點的值在[L, R]中 (R>=L) 。你可能需要改變樹的根節點,所以結果應當返回修剪好的二叉搜尋樹的新的根節點。

錯誤的答案:

class Solution {
public:
    TreeNode* trimBST(TreeNode* root, int L, int R) {
        if(root == NULL)
            return NULL;
        if(root ->val < L)
        {
            root  = root ->right;
            trimBST(root, L, R);
        }
        else if(root ->val > R)
        {
            root  = root ->left;
            trimBST(root, L, R);
        }
        else
        {
            root ->left = trimBST(root ->left, L, R);
            root ->right = trimBST(root ->right, L, R);
        }
        return root;
    }
};

正確的答案:

class Solution {
public:
    TreeNode* trimBST(TreeNode* root, int L, int R) {
        if(root == NULL)
            return NULL;
        if(root ->val < L)
        {
            root = trimBST(root ->right, L, R);
        }
        else if(root ->val > R)
        {
            root = trimBST(root ->left, L, R);
        }
        else
        {
            root ->left = trimBST(root ->left, L, R);
            root ->right = trimBST(root ->right, L, R);
        }
        return root;
    }
};