搜索二叉树迭代和递归的两种*简单*实现方式

判断搜索二叉树

概念

一棵树所有结点的左节点小于父节点,右节点大于父节点,则为搜索二叉树。
搜索二叉树

迭代方法

  • 中序遍历二叉树,如果总是升序是搜索二叉树
  • 如果存在降序,那肯定不是搜索二叉树

Coding

checkTreeOrder()方法

bool checkTreeOrder(Node* head) {stack<Node*> st;int n = INT_MIN;while (!st.empty() || head != NULL) {if (head != NULL) {st.push(head);head = head->left;} else {Node* node = st.top();if (node->value > n) {n = node->value;} else {return false;}st.pop();head = node->right;}}return true;
}

最终代码

//迭代方法
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
// 判断搜索二叉树struct Node {int value;Node* left;Node* right;Node(int v): value(v), left(NULL), right(NULL) {};
};bool checkTreeOrder(Node* head) {stack<Node*> st;int n = INT_MIN;while (!st.empty() || head != NULL) {if (head != NULL) {st.push(head);head = head->left;} else {Node* node = st.top();if (node->value > n) {n = node->value;} else {return false;}st.pop();head = node->right;}}return true;
}int main() {Node* head = new Node(5);Node* v3 = new Node(3);Node* v7 = new Node(7);Node* v2 = new Node(2);Node* v4 = new Node(4);Node* v6 = new Node(6);Node* v8 = new Node(8);Node* v1 = new Node(1);head->left = v3;head->right = v7;head->left->left = v2;head->left->right = v4;head->left->left->left = v1;head->right->left = v6;head->right->right = v8;if (checkTreeOrder(head)) {cout << "true!" << endl;} else {cout << "false!" << endl;}
}

递归方法

1.第一种实现方式(动态调整)

//递归方法
int preValue = INT_MIN;
inline bool isBST(Node* head) {if (head == NULL) {return true;}//如果左树不是,直接剪枝bool isLeftBST = isBST(head->left);if (isLeftBST == false) {return false;}//**********************//设置布尔属性if (head->value <= preValue) {return false;} else {preValue = head->value;}return isBST(head->right);
}

2.第二种实现方式-存入数组依次遍历(更加简单,不过效率略低)

vector<int> BSTelements;
inline void isBST_easy(Node* head) {if (head == NULL) return;isBST_easy(head->left);BSTelements.push_back(head->value);isBST_easy(head->right);
}inline bool checkArrayOrder(Node* head) {isBST_easy(head);for (int i = 1; i < BSTelements.size(); i++) {if (BSTelements[i] < BSTelements[i-1]) {return false;}}return true;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/548897.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 基础知识点(蓝桥杯python科目个人复习计划65)

今日复习内容&#xff1a;做题 例题1&#xff1a;遥远的雪国列车 问题描述&#xff1a; 小蓝和小红今天在房间里一起看完了“雪国列车”这部电影&#xff0c;看完之后他们感触颇深&#xff0c;同时他们想到了这样一道题目&#xff1a; 现在有一个数轴&#xff0c;长度为N&a…

代码随想录算法训练营第二十五天|216.组合总和III,17.电话号码的字母组合

216.组合总和III 题目 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数&#xff0c;并且每种组合中不存在重复的数字。 说明&#xff1a; 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 示例 2: 输入…

java方法的引用传递和值传递

1、方法的值参数传递 下面代码&#xff0c;它会在控制台输出什么&#xff1f; public class ArrayTest {public static void main(String[] args) {int number 100;System.out.println(number);change(number);System.out.println(number);}public static void change(int n…

想要了解更多商品信息?淘宝天猫详情接口API助你一键搞定!

想要了解更多商品信息&#xff1f;淘宝天猫详情接口API是你的理想选择&#xff01;作为唯一提供官方商品数据的接口&#xff0c;它能够帮助你快速获取商品的多种详细信息&#xff0c;联讯数据让你在购物过程中做出更明智的决策。 简介&#xff1a;淘宝天猫详情接口API的功能及…

【C语言_数组_复习篇】

目录 一、数组的概念 二、数组的类型 三、一维数组 3.1 一维数组的创建 3.2 一维数组的初始化 3.3 一维数组的访问 3.4 一维数组在内存中的存储 四、二维数组 4.1 二维数组的创建 4.2 二维数组的初始化 4.3 二维数组的访问 4.4 二维数组在内存中的存储 五、字符串数组 5.1…

干货分享,大厂内部压测方案设计!

01、为什么要做压测 1、什么是压力测试&#xff1f; 不断向被测对象施加压力&#xff0c;测试系统在压力情况下的表现。 2、压力测试的目的是什么&#xff1f; 测试得出系统的极限性能指标&#xff0c;从而给出合理的承诺值或者容量告警&#xff1b; 找出系统的性能瓶颈&a…

检查约束

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 检查约束 检查约束指的是在数据列上设置一些过滤条件&#xff0c;当过滤条件满足的时候才可以进行保存&#xff0c;如果不满足则出现错误。例如&#xff0c;设置年龄的信息…

低成本3D打印上位机,wifi增强器(棒子),刷Klipper

WIFI增强器(棒子)刷写Klipper&#xff0c;作为3D打印机的上位机。 本文中采用的棒子&#xff1a;骁龙410 512mb4g 1.下载安装必要软件 下载地址&#xff1a;https://pan.baidu.com/s/1QjYFknUYGnVMKYablFnZfQ?pwdukr9 提取码&#xff1a;ukr9 下载完成后总共四个文件 …

Go微服务实战——服务的注册与获取(nacos做服务注册中心)

背景 随着访问量的逐渐增大&#xff0c;单体应用结构渐渐不满足需求&#xff0c;在微服务出现之后引用被拆分为一个个的服务&#xff0c;服务之间可以互相访问。初期服务之间的调用只要知道服务地址和端口即可&#xff0c;而服务会出现增减、故障、升级等变化导致端口和ip也变…

Mesh网格obj文件构成解析

众所周知&#xff0c;Mesh网格是三维重建的常用手法&#xff0c;通过顶点-三角面的形式来完成对三维物体的表达。其中&#xff0c;最常见的Mesh网格文件格式就是obj格式。看起来复杂的三维形状其实在数值表示上是很简单的&#xff0c;大家跟我一起来做个小实验就好&#xff1a;…

【考研数学】全年保姆级规划+资料选择

直接跟考研课学即可 跟宋浩学第一遍说是基础&#xff0c;但宋浩的课程毕竟针对的是大学期末考试&#xff0c;基础知识方面讲的可能没有考研课程全面&#xff0c;毕竟大学课程的授课时间和考核要求不同于考研。 备考之前对自己做一个评估&#xff0c;每一个要准备的科目和其中…

安卓14谷歌GooglePlay商店安装 谷歌基础服务打开 GMS服务开关 谷歌三件套安装

环境&#xff1a;最新的安卓手机已经内置了谷歌三件套例如小米手机打开Go安装器可以看到结果&#xff0c;但是为什么没有Play 商店的桌面进入图标呢&#xff0c;因为默认厂商把图标给隐藏了&#xff0c;只需要重新打开即可。 提示安装 Google 服务后系统会增加显著的耗电&…