二叉搜索树判定方法(c++实现)
--- 欢迎指正---
自己想到的方法是:使用 中序遍历数组或者链表,然后比较数组或者链表中的数据是否有序。
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++实现)相关推荐
- 高度平衡的二叉搜索树基础概念与经典题目(Leetcode题解-Python语言)
高度平衡的二叉搜索树(平衡二叉树),定义见此Leetbook.简单来说,就是基于相同节点值构建出来的二叉搜索树中高度最小的,即为平衡二叉树(不唯一).有 N 个节点的平衡二叉搜索树,它的高度是 log ...
- 最优二叉搜索树java_动态规划-最优二叉搜索树
算法思想:动态规划 实际问题:最优二叉搜索树 编写语言:Java 问题描述 二叉搜索树的定义: 满足以下任意两个条件的一个,就可称这棵树为二叉搜索树: 它是一棵空树 该树是一颗二叉树,非空,且满足下列 ...
- 判定一棵二叉树是否是二叉搜索树
问题 给定一棵二叉树,判定该二叉树是否是二叉搜索树(Binary Search Tree)? 解法1:暴力搜索 首先说明一下二叉树和二叉搜索树的区别.二叉树指这样的树结构,它的每个结点的孩子数目最多为 ...
- 【CCCC】L3-010 是否完全二叉搜索树 (30分),完全二叉树判断+层次遍历(奇怪的方法)
problem L3-010 是否完全二叉搜索树 (30分) 将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序 ...
- 数据结构之二叉搜索树/二叉查找数/有序二叉树/排序二叉树
概念~ 二叉查找树(英语:Binary Search Tree),也称二叉搜索树.有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree), ...
- 详解 二叉搜索树-----AVL树
二叉搜索树 根结点比左子树中所有结点都大 根结点比右子树所有结点都小 最小的元素在最左侧 最大的元素在最右侧 中序遍历有序 具有以上的特征的二叉树就是二叉搜索树也叫二叉排序数 二叉搜索树的操作 查找 ...
- 力扣题目——98. 验证二叉搜索树
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 题目描述 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具 ...
- 【数据结构】树与树的表示、二叉树存储结构及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树与哈夫曼编码、集合及其运算
1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R ...
- 二叉搜索树BST的学习
文章目录 二叉搜索树BST 什么是BST? 用BST做什么? 一.BST的特性 BST的特性是什么? 1.[230. 二叉搜索树中第K小的元素](https://leetcode.cn/problem ...
最新文章
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- oracle监听器启动错误-TNS-12546: TNS:permission denied
- neo4j安装_Neo4J和Enterprise Java的撤消功能
- 《程序员修炼之道》备忘清单
- 附5、MDT 2013 Update 1批量部署-更新版无法修改共享文件夹参数的解决办法
- Swift傻傻分不清楚系列(七)控制流
- 产品经理必须知道的一些知识:决定价格的四种因素
- Foxmail新建自动标签功能在哪 如何给Foxmail收件人邮件设置自动标签
- 最全面超大规模数据集下载链接汇总(转)
- 正则表达式30分钟入门教程-2
- 51nod 1770 数数字
- 数据库的三才阵——地
- 3、Keras中的顺序模型Sequential和函数式模型Model
- 50个面试官最喜欢问的java微服务面试题
- 计算机专业英语1500词TXT,计算机专业英语词汇1500词(一)
- 微服务网关 vs K8s Ingress
- Word中有些空行无法删除,我是这样解决的.............
- HydroGo-Pre 水动力学模型建模统一前处理系统使用说明
- 艺赛旗(RPA) Python 科学计算:matplotlib (精华博文)
- 开发工具---Eclipse 教程Ⅰ