20211005省選組T1 數列(array)
阿新 • • 發佈:2021-10-05
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; } }