【二叉搜索树】
- 节点的左子树的所有节点都小于当前节点;
- 节点的右子树的所有节点都大于当前节点;
- 所有的左子树和右子树自身必须也是二叉搜索树。
【解题思路】
- 只需改写二叉树的中序遍历,在遍历的时候判断节点值是否都是递增的即可。
【注意】
- 二叉搜索树中不存在相同元素
- pre的使用,避免了初始化时可能会初始化为节点元素
【递归法】
TreeNode* pre = NULL;//记录为最左面节点的数值
bool isBST(TreeNode* root){
if(root == NULL)
return true;
bool isLeftBST = isBST(root->left);
if(pre != NULL && pre->value >= root->value)
return false;
pre = root;//记录前一个节点
return isBST(root->right);//若左子树为假,则不会判断右子树,所以直接返回右子树即可
}
【非递归】
bool isBST2(TreeNode* root){
if(root != NULL){
stack<TreeNode*> sta;
TreeNode* cur = root,*pre = NULL;
while(!sta.empty() || cur != NULL){
if(cur != NULL){
sta.push(cur);
cur = cur->left;
}else{
cur = sta.top();
sta.pop();
/*同二叉树的中序遍历,以下三行为变动后代码*/
if(pre != NULL && pre->value >= cur->value)
return false;
pre = cur;//更新前一个节点
cur = cur->right;
}
}
}
return true;
}