最简单的想法,中序遍历二叉树:
- 递归中序遍历二叉树,得到一个中序遍历的序列
- 判断这个序列是不是有序
class Solution { public: void midTree(TreeNode * root, vector<int> & list) { if(root->left==NULL&&root->right==NULL) { list.push_back(root->val); return; } if(root->left) midTree(root->left,list); list.push_back(root->val); if(root->right) midTree(root->right,list); } bool isValidBST(TreeNode* root) { vector<int> list; if(root==NULL) return true; midTree(root,list); for(int i=0;i<list.size()-1;i++) { cout<<list[i]<<endl; if(list[i+1]<=list[i]) return false; } return true; } };
或者直接判断:
- 中序遍历,后面的节点要比前面遍历的节点值大
class Solution {
// make sure it meets the BST not only at this level,
// but also previous level
// in-order access could produce a ascending order list
// DFS
bool helper(TreeNode * root) {
if (root == NULL) {
return true;
}
if (!helper(root->left)) {
return false;
}
if (prev != NULL && prev->val >= root->val) {
return false;
}
prev = root;
return helper(root->right);
}
public:
TreeNode* prev = NULL;
bool isValidBST(TreeNode* root) {
return helper(root);
}
};
转载于:https://www.cnblogs.com/fanhaha/p/7348446.html
原文链接:https://blog.csdn.net/weixin_30342827/article/details/96830375
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
还没有人抢沙发呢~