标签:
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
Example 1:
2 / 1 3Binary tree
[2,1,3]
,
return true.
Example 2:
1 / 2 3Binary tree
[1,2,3]
,
return false.
判断是否为有效的二叉搜索树
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { //易错点,不是左结点的值小于根节点的值,是左子树所有的结点小于根节点 public: //解法1 //即左<根<右,初始化时带入系统最大值和最小值,在递归过程中换成它们自己的节点值,用long代替int就是为了包括int的边界条件。 bool isValidBST(TreeNode* root) { return helper(root,LONG_MIN,LONG_MAX); } bool helper(TreeNode* root,long left,long right) { if(root==NULL) return true; if(root->val<=left||root->val>=right) return false; return helper(root->left,left,root->val)&&helper(root->right,root->val,right); } };
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { //解法2,中序遍历,左根右 public: vector<int> res; bool isValidBST(TreeNode* root) { if(root==NULL)return true; inorder(root); for(int i=0;i<res.size()-1;i++) if(res[i]>=res[i+1]) return false; return true; } void inorder(TreeNode* root) { stack<TreeNode*> s; while(root!=NULL||!s.empty()) { if(root!=NULL) { s.push(root); root=root->left; continue; } else { root=s.top(); s.pop(); res.push_back(root->val); root=root->right; } } } };
leetcode No98. Validate Binary Search Tree
标签:
原文地址:http://blog.csdn.net/u011391629/article/details/52227641