98. 验证二叉搜索树
题目描述:
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
思想:
迭代中序递增遍历
代码:
/** * 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: bool isValidBST(TreeNode* root) { stack<TreeNode*> s; TreeNode* pre = nullptr; while(!s.empty() || root){ while(root){ //先将左子树的结点入栈 s.push(root); root = root->left; } root = s.top(); //取栈顶元素 s.pop(); if(pre && pre->val >= root->val) //注意= return false; pre = root; root = root->right; //转到右子树 } return true; } };