首页 > 其他 > 详细

LeetCode: Validate Binary Search Tree

时间:2014-03-17 10:18:05      阅读:367      评论:0      收藏:0      [点我收藏+]

Given a binary tree, determine if it is a valid binary search tree (BST).

我想到了用中序遍历,保存到一个数组中,再检查数组是否是有序的。但是我需要O(n)的额外空间保存这个数组。

网上看到一种和这个一样的方法,但是不需要额外空间,但是没太看懂。

bubuko.com,布布扣
 1 public static boolean isValidBST(TreeNode root) {
 2         ArrayList<Integer> list = new ArrayList<Integer>();
 3         traverse(root, list);
 4         
 5         for (int i=0; i<list.size()-1; i++) {
 6             if (list.get(i) >= list.get(i+1)) {
 7                 return false;
 8             }
 9         }
10         
11         return true;
12     }
13     
14     public static void traverse (TreeNode root, ArrayList<Integer> list) {    
15         if (root != null) {
16             traverse(root.left, list);
17             list.add(root.val);
18             traverse(root.right, list);
19         }
20     }
bubuko.com,布布扣

 

bubuko.com,布布扣
 1 bool isBSTInOrderHelper(BinaryTree *p, int& prev) {
 2   if (!p) return true;
 3   if (isBSTInOrderHelper(p->left, prev)) {
 4     if (p->data > prev) {
 5       prev = p->data;
 6       return isBSTInOrderHelper(p->right, prev);
 7     } else {
 8       return false;
 9     }
10   }
11   else {
12     return false;
13   }
14 }
bubuko.com,布布扣

 

另外一种不需要额外空间的方法是确定每个元素的范围,然后检查这个元素是否在范围内。

递归判断,递归时传入两个参数,一个是左界,一个是右界,节点的值必须在两个界的中间,同时在判断做子树和右子树时更新左右界。

bubuko.com,布布扣
 1 class Solution {
 2 public:
 3     bool check(TreeNode *node, int leftVal, int rightVal)
 4     {
 5         if (node == NULL)
 6             return true;
 7             
 8         return leftVal < node->val && node->val < rightVal && check(node->left, leftVal, node->val) &&
 9             check(node->right, node->val, rightVal);
10     }
11     
12     bool isValidBST(TreeNode *root) {
13         return check(root, INT_MIN, INT_MAX);        
14     }
15 };
bubuko.com,布布扣

LeetCode: Validate Binary Search Tree,布布扣,bubuko.com

LeetCode: Validate Binary Search Tree

原文:http://www.cnblogs.com/longhorn/p/3603015.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!