Validate Binary Search Tree 检测一个BST是否有效@LeetCode
来源:互联网 发布:如何查mac air數據 编辑:程序博客网 时间:2024/05/21 17:34
思路:用上下限限定来递归
一开始想到了递归,但没想到用上下限的办法,而用多加一个parent作参数,结果非常麻烦。改成用上下限后代码很简洁清晰。
package Level3;import Utility.TreeNode;/** * Validate Binary Search Tree * * Given a binary tree, determine if it is a valid binary search tree (BST).Assume a BST is defined as follows:The left subtree of a node contains only nodes with keys less than the node's key.The right subtree of a node contains only nodes with keys greater than the node's key.Both the left and right subtrees must also be binary search trees.confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.OJ's Binary Tree Serialization:The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.Here's an example: 1 / \ 2 3 / 4 \ 5The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}". * */public class S98 {public static void main(String[] args) {TreeNode root = new TreeNode(3);TreeNode p1 = new TreeNode(1);TreeNode p2 = new TreeNode(5);TreeNode p3 = new TreeNode(0);TreeNode p4 = new TreeNode(2);TreeNode p5 = new TreeNode(4);TreeNode p6 = new TreeNode(6);root.left = p1;root.right = p2;p1.left = p3;p1.right = p4;p2.left = p5;p2.right = p6;System.out.println(isValidBST(root));}public static boolean isValidBST(TreeNode root) {return rec(root, Integer.MIN_VALUE, Integer.MAX_VALUE); }// 用最小值和最大值,来限定子树的范围public static boolean rec(TreeNode root, int min, int max){if(root == null){return true;}// 不在范围内if(root.val <= min || root.val >= max){return false;}// 检查左右子树的合法性并更新上下限return rec(root.left, min, root.val) && rec(root.right, root.val, max);}}
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public boolean isValidBST(TreeNode root) { return isBSTRec(root, Integer.MIN_VALUE, Integer.MAX_VALUE); } public boolean isBSTRec(TreeNode root, int left, int right) { if(root == null) { return true; } if(root.val <= left || root.val >= right) { return false; } return isBSTRec(root.left, left, root.val) && isBSTRec(root.right, root.val, right); }}
- Validate Binary Search Tree 检测一个BST是否有效@LeetCode
- Tree_Graph Validate Binary Search Tree 检测一个BST是否有效 @CareerCup
- BST-----Validate Binary Search Tree
- [C++]LeetCode: 122 Validate Binary Search Tree (是否是合法BST树)
- 98.Validate Binary Search Tree&检查是否为BST
- LeetCode(Validate Binary Search Tree) 判断一个二叉树是否是二叉搜索树
- LeetCode: Validate Binary Search Tree
- [Leetcode] Validate Binary Search Tree
- LeetCode : Validate Binary Search Tree
- [LeetCode] Validate Binary Search Tree
- [LeetCode] Validate binary search tree
- [LeetCode]Validate Binary Search Tree
- [Leetcode]Validate Binary Search Tree
- [leetcode]Validate Binary Search Tree
- LeetCode-Validate Binary Search Tree
- [leetcode] Validate Binary Search Tree
- LeetCode - Validate Binary Search Tree
- [LeetCode] Validate Binary Search Tree
- Java生成随机长度指定密码
- 美观大方的wordpress企业主题 dx-ecbr
- 2-1 ~ 2-2 内置类型和字面值常量
- [Leetcode 66, Easy] Plus One
- 2-3 变量
- Validate Binary Search Tree 检测一个BST是否有效@LeetCode
- 【开发工具】分布式编译-IncrediBuild
- 2-4 const 限定符
- java包命名
- 2-5 引用
- 2-6 & 2-7 typedef & 枚举
- LeetCode题解:Merge 2 Sorted Lists
- 2-8 类类型 & 头文件
- ffdemux_mpegts中时间戳的处理问题