码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode || 98、Validate Binary Search Tree

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

标签:leetcode   dfs   查找二叉树   递归   二叉树   

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

标签:leetcode   dfs   查找二叉树   递归   二叉树   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!