Validate Binary Search Tree @LeetCode
一开始想到了递归,但没想到用上下限的办法,而用多加一个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 \ 5 The 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); } }
补充:软件开发 , Java ,