程式碼隨想錄 第23天 | 669. 修剪二叉搜尋樹 ● 108.將有序陣列轉換為二叉搜尋樹 ● 538.把二叉搜尋樹轉換為累加樹 ● 總結篇

22软工冷薄發表於2024-03-17

leetcode:669. 修剪二叉搜尋樹 - 力扣(LeetCode)

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        //和刪除差不多,怕刪除的節點的左右孩子節點有符合範圍的,所以要每次判斷一下,如果有不符合要求的就直接返回上一個節點。
        if( root == null) return root;
        //刪除節點,判斷該節點右孩子有沒有符合題目範圍的
        if( root.val < low){
            return trimBST(root.right,low,high);
        }
        //刪除節點判斷該節點左孩子有沒有符合題目範圍的
        if(root.val > high ){
            return trimBST(root.left,low,high);
        }
        //遍歷深度
        root.left = trimBST(root.left,low,high);
        root.right = trimBST(root.right,low,high);
        //有就返回
        return root;

    }
}

leetcode:108. 將有序陣列轉換為二叉搜尋樹 - 力扣(LeetCode)

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {

        return gettree(nums,0,nums.length - 1);
    }
    public TreeNode gettree(int[] nums,int left,int right){
        //判斷越界
        if(left > right) return null;
        int mid = (left + right)/2;
        //將中間節點作為根節點
        TreeNode node = new TreeNode(nums[mid]);
        //將陣列區分成左右節點。
        node.left = gettree(nums,left,mid-1);
        node.right = gettree(nums,mid+1,right);
        return node;


    }
}

leetcode:538. 把二叉搜尋樹轉換為累加樹 - 力扣(LeetCode)

class Solution {
    //初始0
    TreeNode pre = new TreeNode(0);
    public TreeNode convertBST(TreeNode root) {
    //終止條件
        if( root == null) return null;
        //因為是後續遍歷的倒序,所以是右中左
        //
        root.right = convertBST(root.right);
        //中,將累加的值賦給root
        pre.val += root.val;
        root.val = pre.val;
        //
        root.left = convertBST(root.left);
        return root;
    }
}

相關文章