problem:
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
confused what "{1,#,2,3}"
means? >
read more on how binary tree is serialized on OJ.
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; } };
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