--- 欢迎指正---

自己想到的方法是:使用 中序遍历数组或者链表,然后比较数组或者链表中的数据是否有序。

CC150 提供了更棒的解法。

原文大致描述:

//<方法1>
//首先我们想到的是二叉树中序遍历后的结果是有序的,根据这个结果,我们可以中序遍历二叉树,并把遍历结果存放在一个数组里面,// 然后判断这个数组大小是否是有序数组,如果是有序数组,则是二叉查找树,否则就不是。
//这个方法的时间复杂度是O(N),但是空间复杂度比较高,需要浪费O(N)的存储空间。
//<方法2>
//其实在<方法1>的基础上,我们可以在中序遍历的同时,比较大小,每次记录下上次遍历过的元素的值,如果当前元素的值大于上次遍历元素的值,则接着遍历,否则返回false,// 因为这个记录是一个址传递,所以需要用到引用形参进行传递。
//这个方法的时间复杂度与<方法1>的时间复杂度相同,只是空间复杂度只需要一个元素O(1)。

按照提供的思路,自己尝试写了下代码:

结点结构:

struct node
{// 数据域int data;// 左节点node *lc;// 右结点node *rc;// 构造函数
    node(): data(0), lc(NULL), rc(NULL){}
};

判定方法:

 // 采用中序遍历的思路bool is_bst(node *pnode, int &last_val){if (NULL == pnode)return true;// 开始遍历左子树if (!is_bst(pnode->lc, last_val))return false;// 因为左孩子的结点值比当前结点的值还要小。否则 就不是 二叉搜索树if (last_val > pnode->data)return false;last_val = pnode->data;// 遍历右子树if (!is_bst(pnode->rc, last_val))return false;return true;}

GitHub地址: https://github.com/mohistH/base_data_structure

转载于:https://www.cnblogs.com/pandamohist/p/10582448.html

二叉搜索树判定方法(c++实现)相关推荐

  1. 高度平衡的二叉搜索树基础概念与经典题目(Leetcode题解-Python语言)

    高度平衡的二叉搜索树(平衡二叉树),定义见此Leetbook.简单来说,就是基于相同节点值构建出来的二叉搜索树中高度最小的,即为平衡二叉树(不唯一).有 N 个节点的平衡二叉搜索树,它的高度是 log ...

  2. 最优二叉搜索树java_动态规划-最优二叉搜索树

    算法思想:动态规划 实际问题:最优二叉搜索树 编写语言:Java 问题描述 二叉搜索树的定义: 满足以下任意两个条件的一个,就可称这棵树为二叉搜索树: 它是一棵空树 该树是一颗二叉树,非空,且满足下列 ...

  3. 判定一棵二叉树是否是二叉搜索树

    问题 给定一棵二叉树,判定该二叉树是否是二叉搜索树(Binary Search Tree)? 解法1:暴力搜索 首先说明一下二叉树和二叉搜索树的区别.二叉树指这样的树结构,它的每个结点的孩子数目最多为 ...

  4. 【CCCC】L3-010 是否完全二叉搜索树 (30分),完全二叉树判断+层次遍历(奇怪的方法)

    problem L3-010 是否完全二叉搜索树 (30分) 将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序 ...

  5. 数据结构之二叉搜索树/二叉查找数/有序二叉树/排序二叉树

    概念~ 二叉查找树(英语:Binary Search Tree),也称二叉搜索树.有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree), ...

  6. 详解 二叉搜索树-----AVL树

    二叉搜索树 根结点比左子树中所有结点都大 根结点比右子树所有结点都小 最小的元素在最左侧 最大的元素在最右侧 中序遍历有序 具有以上的特征的二叉树就是二叉搜索树也叫二叉排序数 二叉搜索树的操作 查找 ...

  7. 力扣题目——98. 验证二叉搜索树

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 题目描述 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具 ...

  8. 【数据结构】树与树的表示、二叉树存储结构及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树与哈夫曼编码、集合及其运算

    1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R ...

  9. 二叉搜索树BST的学习

    文章目录 二叉搜索树BST 什么是BST? 用BST做什么? 一.BST的特性 BST的特性是什么? 1.[230. 二叉搜索树中第K小的元素](https://leetcode.cn/problem ...

最新文章

  1. copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
  2. oracle监听器启动错误-TNS-12546: TNS:permission denied
  3. neo4j安装_Neo4J和Enterprise Java的撤消功能
  4. 《程序员修炼之道》备忘清单
  5. 附5、MDT 2013 Update 1批量部署-更新版无法修改共享文件夹参数的解决办法
  6. Swift傻傻分不清楚系列(七)控制流
  7. 产品经理必须知道的一些知识:决定价格的四种因素
  8. Foxmail新建自动标签功能在哪 如何给Foxmail收件人邮件设置自动标签
  9. 最全面超大规模数据集下载链接汇总(转)
  10. 正则表达式30分钟入门教程-2
  11. 51nod 1770 数数字
  12. 数据库的三才阵——地
  13. 3、Keras中的顺序模型Sequential和函数式模型Model
  14. 50个面试官最喜欢问的java微服务面试题
  15. 计算机专业英语1500词TXT,计算机专业英语词汇1500词(一)
  16. 微服务网关 vs K8s Ingress
  17. Word中有些空行无法删除,我是这样解决的.............
  18. HydroGo-Pre 水动力学模型建模统一前处理系统使用说明
  19. 艺赛旗(RPA) Python 科学计算:matplotlib (精华博文)
  20. 开发工具---Eclipse 教程Ⅰ

热门文章

  1. qq语音按住ctrl就静音怎么解决_绝地求生大逃杀:语音故障的解决办法
  2. WebStorm 是什么软件
  3. 学会学习比学习什么更重要
  4. 在React和Vue中支持服务器端呈现
  5. We want to do better without being distracted
  6. The world’s largest
  7. 二叉树的层次遍历II
  8. SpringCloud和SpringBoot组件对比
  9. HTML表单input里面的value的作用
  10. 源码安装yui compressor