首页 > 其他 > 详细

leetcode || 98、Validate Binary Search Tree

时间:2015-04-17 18:25:28      阅读:192      评论:0      收藏:0      [点我收藏+]

problem:

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.

Hide Tags
 Tree Depth-first Search
题意:判断一颗二叉树是否为搜索二叉树,注意搜索二叉树的性质:左子树的所有节点小于父节点,
右子树的所有节点大于父节点

thinking:

(1)开始试着用递归写了一个程序,对搜索二叉树的定义曲解了。仅仅比较了左孩子和右孩子。是错的。

class Solution {
public:
    bool isValidBST(TreeNode *root) {
        if(root==NULL)
            return true;
        TreeNode *parent = root;
        TreeNode *left_child=parent->left;
        TreeNode *right_child=parent->right;
        bool r=true;
        bool l=true; 
        if(left_child!=NULL)
        {
            if(left_child->val<parent->val)
                l=isValidBST(left_child);
            else
                l=false;
        }
        if(right_child!=NULL)
        {
            if(right_child->val>parent->val)
                r=isValidBST(right_child);
            else
                r=false;
        }
        return l&&r;      
    }
};

(2)正确解法是:中序遍历。采用DFS(非递归法)中序遍历二叉树,节点的VAL 应该是一个递增序列。

code:

class Solution {
  public:
      bool isValidBST(TreeNode *root)
      {
        vector<int> ret=inorderTraversal(root);
        int n=ret.size();
        if(n<2)
            return true;
        for(int i=1;i<n;i++)
        {
            if(ret[i]<=ret[i-1])
                return false;
        }
        return true;
      }
  protected:
      vector<int> inorderTraversal(TreeNode *root) {  
                 vector<int> ret;  
                 stack<TreeNode*> _stack;  
                 TreeNode *tmp=root;  
                 while(tmp!=NULL || !_stack.empty())  
                 {  
                     if(tmp!=NULL)  
                     {  
                         _stack.push(tmp);  
                         tmp=tmp->left;  
                     }  
                     else  
                     {  
                         tmp=_stack.top();  
                         _stack.pop();  
                         ret.push_back(tmp->val);  
                         tmp=tmp->right;  
                     }  
                 }  
               return ret;     
          }  
  };


leetcode || 98、Validate Binary Search Tree

原文:http://blog.csdn.net/hustyangju/article/details/45097673

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