sicily Check if a binary tree satisfies the binary search tree property
2014-01-02 19:41
260 查看
判断一个二叉树是否满足二叉搜索树的性质。二叉搜索树即为:或者是一棵空树,或者是具有下列性质的二叉树:
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
本题中,我使用了queue的数据结构,先定义了一个queue类型的结构tree。以tree不为空作为循环条件,先将根节点push进去,然后将queue的首元素的data数据与其左右子树进行比较,若不满足BST要求则return false,若满足则先将queue的首元素pop掉,然后使左右子树分别作为首元素,将左右子树各自的子树依次push进来,从而完成遍历所有的元素。若均满足条件,则return
true。
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
本题中,我使用了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; }
相关文章推荐
- windows远程连接Linux的两个小工具
- opencv训练样本库过程中的常见问题
- Squid代理服务3.1版本的配置和使用简介
- Linux(Ubuntu) 安装mysql,windows使用Navicat 连接
- Linux下无连接的套接字通信C实现
- Linux_Struct_inode() 结构体详解
- 嵌入式 linux下字符串简单转为对应的数字
- linux下usb转串口驱动分析
- Jenkins实战演练之Linux服务器快速搭建
- linux tips
- CentOS 6.4下编译安装MySQL 5.6.14
- CentOS 6.4下编译安装MySQL 5.6.14
- linux arp 攻击源码分析
- 程序猿找工作必练内功:排序算法大总结(六)——shell排序
- 解决苹果os 10.9 和 parallels desktop 8 兼容问题
- hadoop发行版本比较
- Linux 有趣命令
- Ubuntu12.04 LTS安装部署OpenStack Grizzly
- puppet运维自动化配置安装学习
- linux 的kernel的入口之 -- start_kernel 分析