在处理二叉搜索树时,我们第一时间想到的是中序遍历得到有序数组,然后再根据需求处理,其实也可以在中序遍历时就处理。
直接中序遍历生成数组,再判断数组是否有序即可。
也可以直接在中序遍历时处理
class Solution {
public:
TreeNode* last = NULL; // 用来记录前一个节点
bool isValidBST(TreeNode* root) {
// 终止条件
if (root == NULL) {
return true;
}
// 左
bool left = isValidBST(root->left);
// 中。在这里直接处理,前一个节点不为空,并且前一个节点的值大于等于当前节点,返回false
if (last != NULL && last->val >= root->val) {
return false;
}
last = root; // 更新前一个节点
// 右
bool right = isValidBST(root->right);
return left && right;
}
};
参考:本题的评论区