sicily Check if a binary tree satisfies the binary search tree property

判断一个二叉树是否满足二叉搜索树的性质。二叉搜索树即为:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树

本题中,我使用了queue的数据结构,先定义了一个queue类型的结构tree。以tree不为空作为循环条件,先将根节点push进去,然后将queue的首元素的data数据与其左右子树进行比较,若不满足BST要求则return false,若满足则先将queue的首元素pop掉,然后使左右子树分别作为首元素,将左右子树各自的子树依次push进来,从而完成遍历所有的元素。若均满足条件,则return true。

#include<iostream>
#include<queue>
using namespace std;
typedef int T;
struct BinaryNode{
	T data; //store data 
	BinaryNode *left, *right;
	BinaryNode(T d, BinaryNode *l=NULL, BinaryNode* r=NULL):data(d), left(l), right(r) {}; //此处为一个结构体内的类,定义了BinaryNode的内容。
};

bool isBST(const BinaryNode* root) {
// returns true if the input root is a binary search tree, otherwise, returns false.
	if (root == NULL) {
		return true;
	}
	queue<const BinaryNode*>tree;
	tree.push(root);
	while (!tree.empty()) {
		if (tree.front()->left != NULL) {
			if (tree.front()->data < tree.front()->left->data) { // 不满足的情况
				return false;
			}
			tree.push(tree.front()->left); // 若满足,则将当前节点的左子树push进来
		}
		if (tree.front()->right != NULL) {
			if (tree.front()->data > tree.front()->right->data) {
			  return false;
			}
			tree.push(tree.front()->right);
		}
		tree.pop();
	}
	return true;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值