leetcode 669. 修剪二叉搜索树

image

递归:

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);
        else if(root.val>high) return trimBST(root.left,low,high);
        else{
            root.left=trimBST(root.left,low,high);
            root.right=trimBST(root.right,low,high);
            return root;
        }
    }
}

迭代:

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        while(root!=null&&(root.val<low||root.val>high)){
            if(root.val<low) root=root.right;
            else root=root.left;
        }
        TreeNode cur=root;
        while(cur!=null){
            while(cur.left!=null&&cur.left.val<low){
                cur.left=cur.left.right;
            }
            cur=cur.left;
        }
        cur=root;
        while(cur!=null){
            while(cur.right!=null&&cur.right.val>high){
                cur.right=cur.right.left;
            }
            cur=cur.right;
        }
        return root;
    }
}
posted @ 2022-02-16 15:30  livingsu  阅读(23)  评论(0)    收藏  举报