1. 程式人生 > 其它 >20211005省選組T1 數列(array)

20211005省選組T1 數列(array)

700.二叉搜尋樹中的搜尋

給定二叉搜尋樹(BST)的根節點和一個值。 你需要在BST中找到節點值等於給定值的節點。 返回以該節點為根的子樹。 如果節點不存在,則返回 NULL。

例如,

在上述示例中,如果要找的值是 5,但因為沒有節點值為 5,我們應該返回 NULL。

 public TreeNode searchBST(TreeNode root, int val) {
        return search(root,val);

    }
    private TreeNode search(TreeNode root,int val){
        if(root==null){
            return null;
        }
 
        if(val>root.val){
           return search(root.right,val);
        }
        if(val<root.val){
            return search(root.left,val);
        }
        return root;
    }

98. 驗證二叉搜尋樹

給定一個二叉樹,判斷其是否是一個有效的二叉搜尋樹。

假設一個二叉搜尋樹具有如下特徵:

  • 節點的左子樹只包含小於當前節點的數。
  • 節點的右子樹只包含大於當前節點的數。
  • 所有左子樹和右子樹自身必須也是二叉搜尋樹。

 

 public boolean isValidBST(TreeNode root) {
      return process(root).isBST;
    }

    // max ,min left.isbst right.isbst left.max<root.val right.min>root.val
    private Info process(TreeNode root){
        if(root ==null){
            return null;//注意這裡,設為空就好,因為最大值和最小值不好設定,會超限的情況,不好控制,後面用時判空就好
        }
   
        Info left=process(root.left);
        Info right=process(root.right);
        int min=root.val;
        int max=root.val;
        
        if(left!=null){
            min=Math.min(left.min,min);
            max=Math.max(left.max,max);
        }
        if(right!=null){
            min=Math.min(right.min,min);
            max=Math.max(right.max,max);
        }
        boolean isBST=false;
        boolean leftFlag=left==null?true:left.isBST && left.max<root.val;
        boolean rightFlag=right==null?true:right.isBST && right.min>root.val;
        if(leftFlag && rightFlag){
            isBST=true;
        }
        return new Info(max,min,isBST);
    }

    public class Info{
        int max;
        int min;
        boolean isBST;
        public Info(int max,int min,boolean isBST){
            this.max=max;
            this.min=min;
            this.isBST=isBST;
        }
    }