(每日一练c++)CC165 检查是否为BST

描述

现给定树的根结点指针TreeNode* root,编辑函数返回一个bool值,判断该树是否为二叉查找树。

解题思路:
1.已知中序遍历排序二叉查找树,得到的序列应是有序的。
2.因此,可以在非递归遍历二叉查找树的中间过程中,取当前遍历节点的值与上一遍历节点值进行比较,若当前节点的值不小于上一节点的值,则继续遍历至结束,否则,返回false。    
3.二叉树中序遍历非递归算法需要借助栈来实现。
public boolean isValidBST(TreeNode root) {
    	if(root==null)
    		return true;
    	Stack<TreeNode> stack = new Stack<TreeNode>();
    	TreeNode p = root;
    	int pre = 0;// 用于保存中序遍历序列的上一节点值
    	boolean isFirst = true;
    	while(p!=null||!stack.isEmpty()){
    		while(p!=null){
    			stack.push(p);
    			p = p.left;
    		}
    		p = stack.pop();
    		if(isFirst){
    			pre = p.val;
    			isFirst = false;
    		}else if(p.val<pre){
    			return false;// 若当前遍历节点的值不大于上一遍历值,则违背了二叉排序树的规则
    		}else{
    			pre = p.val;
    		}		
    		p = p.right;
    	}
    	return true;
    }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

助力毕业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值