问题:判断一棵树是否为排序二叉树(二叉搜索树)

思路:二叉排序树的中序遍历为一递增的排序,若果不满足这一条件,则,不是二叉树

程序实现:

#include <iostream>
#include<limits>using namespace std;typedef struct Btree
{int num;struct Btree * lchild;struct Btree * rchild;
} *PBtree,Btree;int prev=numeric_limits<int>::min();//建立一棵排序二叉树
PBtree createtree(PBtree root,int val)
{PBtree newNode=new Btree();newNode->lchild=NULL;newNode->rchild=NULL;newNode->num=val;if(root==NULL){root=newNode;return newNode;}while(root!=NULL){PBtree pback=NULL;PBtree pcur=root;while(pcur!=NULL){pback=pcur;if(pcur->num<val)pcur=pcur->rchild;else if(pcur->num>val)pcur=pcur->lchild;else{delete newNode;return pcur;}}if(pback->num>val)pback->lchild=newNode;elsepback->rchild=newNode;return pback;}
}//递归实现先序遍历
void preorder(PBtree root)
{if(root==NULL)return ;cout<<root->num<<" ";preorder(root->lchild);preorder(root->rchild);
}//递归实现中序遍历
void inorder(PBtree root)
{if(root==NULL)return ;inorder(root->lchild);cout<<root->num<<" ";inorder(root->rchild);
}//递归实现后序遍历
void postorder(PBtree root)
{if(root==NULL)return ;postorder(root->lchild);postorder(root->rchild);cout<<root->num<<" ";
}bool judgeBST1(PBtree root)
{if(root==NULL)return 1;else{int b=judgeBST1(root->lchild);if(b==0||prev>=root->num)return 0;judgeBST1(root->rchild);}
}
int main()
{PBtree root=NULL;//cout<<prev<<endl;root=createtree(root,6);int a[]={1,2,-6,3,-4,7,9,8,10,5};for(int i=0;i<10;i++)createtree(root,a[i]);cout<<judgeBST1(root)<<endl;inorder(root);return 0;
}

输出结果:

1
-6 -4 1 2 3 5 6 7 8 9 10

判断一棵树是否为排序二叉树(二叉搜索树)相关推荐

  1. C++判断一棵树是否为AVL(二叉平衡树)

    1. 题目要求 判断一棵二叉树是否是平衡二叉树 2. 思路 AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis.AVL树是最先发明的自平衡二叉查找树(S ...

  2. 判断两棵树是否相等与使用二叉链表法建立二叉搜索树

    //判断两个二叉树是否相等 //提问如果两个二叉树的前序遍历相等,能否说明,这两个树相等? //答案是否定的,只有这两个树的 A前序=B前序,A中序=B中序才可以. BOOL isEqualTree( ...

  3. 数据结构与算法之判断一棵树是否为搜索二叉树、判断一棵树是否是完全二叉树

    数据结构与算法之判断一棵树是否为搜索二叉树.判断一棵树是否是完全二叉树 目录 判断一棵树是否为搜索二叉树 判断一棵树是否是完全二叉树 1. 判断一棵树是否为搜索二叉树 概念:搜索树就是中序遍历的结果是 ...

  4. 如何判断一棵树是否是满二叉树

    判断一棵树是否是满二叉树 1.满二叉树定义 2.如何判断一棵树是否是满二叉树 3.代码 1.满二叉树定义 除最后一层无子节点外,其他层的所有节点都有两个子节点的二叉树就是满二叉树.如下图所示: 2.如 ...

  5. 判断一棵树是否是搜索二叉树 判断一棵树是否是完全二叉树

    package class_04;import java.util.LinkedList; import java.util.Queue; /*** * 判断一棵树是否是搜索二叉树* 判断一棵树是否是 ...

  6. 笛卡尔树 (25 分)笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2。首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大。其次所有结点的K2关键字

    立志用最少的代码做最高效的表达 笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2.首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大.其次所有结点的 ...

  7. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  8. 【数据结构】AVL树(高度平衡的二叉搜索树)

    AVL树(高度平衡的二叉搜索树) ①AVL树概念 ②平衡方法 <1>单旋 左单旋 右单旋 <2>双旋 先左后右旋 先右后左旋 ③代码实现 <1>所需头文件 < ...

  9. C++判断一棵树是否为BST(二叉排序树、搜索树)

    1. 题目 给定一棵二叉树,判定该二叉树是否是二叉搜索树(Binary Search Tree)? 2. 思路 二叉搜索树要求: 结点node的左子树所有结点的值都小于node的值. 结点node的右 ...

最新文章

  1. 2019年上半年收集到的AI计算机视觉方向干货文章
  2. java调用kettle连hive_使用java连接hive,并执行hive语句详解
  3. flutter重新配置sdk路径_在Android中配置flutter
  4. c语言枚举类型例题_[开源资讯]Zig 0.6.0 发布,想要挑战 C 语言
  5. vue 微信开发工具 Maximum call stack size exceeded
  6. 华米科技2019全年出货量达4230万台 营收增幅超五成
  7. 快乐大本营中测试声音年龄的软件_海天味极鲜酱油极限挑战宝藏行 终极试炼,极限成员们勇登珠峰大本营...
  8. resnet18实现cifar10分类
  9. 17. meta http-equiv 属性
  10. 数据分析基础-Excel练习
  11. 台式计算机硬盘主要接口,硬盘接口类型,详细教您怎么看硬盘接口的类型
  12. 基于微信校园二手书交易小程序系统 毕业设计毕设参考
  13. R语言基于visreg 包COX回归和连续变量交互效应(交互作用)的可视化分析
  14. SAP中一次性客户及供应商的应用浅晰
  15. 基础拍摄前期和基础后期修图
  16. 1586 - Molar mass
  17. 充分利用计算机研究GIS,GIS在水文水资源领域中的应用研究
  18. WLC5508 HA ( AP SSO)
  19. cond怎么读_cond condition是什么意思
  20. 【Linux】系统管理命令

热门文章

  1. [最短路径弗洛伊德算法]三层循环顺序问题
  2. 养生视野·新知(五)
  3. IOS加载网络图片(Kingfisher)
  4. MySQL创建、更改数据表(CREATE TABLE语句)
  5. Array.prototype.reduce用法
  6. python可以做哪些有趣的事作文_一件有趣的事作文300字(精选8篇)
  7. botoom tab + title bar
  8. MATLAB实现OCR识别数字和字符
  9. Cannot convert URL 'E:/svn/GDJT/Gdjt2.0.2/keysotre/gdcd_keystore.jks' to a f
  10. Window远程桌面无法复制粘贴解决