树和二叉树总结(三)—BST二叉排序树
二叉排序树的特点:中序遍历是递增的…
下面复习几个常用的操作:
1.如何向BST中插入一个节点
思路:用递归做... 首先,判断head是否为空,为空就是需要插的地方; 然后,判断head的data是不是和新Node一样,一样就是重复Node,不加 最后,若比当前head.data小,则放到插到左节点的树你,否则就插到右节点
public static Node insertBST(Node root, Node keyNode) {if (root== null) { //如果遇到空的地方,就是该插入的地方...root= keyNode;} else { //如果节点不为空,则需要查找对应的位置,和二分法查找类似if (root.data == keyNode.data) { //找到一个同值得数,直接返回return root;} else if (keyNode.data < root.data) {root.left = insertBST(root.left, keyNode);} else {root.right = insertBST(root.right, keyNode);}}return root;}
2.如何创建BST
思路:和给BST插值一样,逐步insert...
public static Node createBST(int[] arr) {Node root = null;for (int i = 0; i < arr.length; i++) {root = insertBST(root, new Node(arr[i]));}return root;}
3.判断一个树是不是二叉排序树
思路: 因为二叉排序树的中序遍历是递增有序序列,则可以利用这个特点,直接中序遍历二叉树,如果保证 前一个比后一个小,那么证明该树为一颗二叉排序树...
public static boolean judgeBst(Node root) {int preVal = 0;Node cur = root;Stack<Node> stack = new Stack<>();while (true) {while (cur != null) {stack.push(cur);cur = cur.left;}if (stack.isEmpty())break;cur = stack.pop();if (preVal > cur.data) {return false;} else {preVal = cur.data;}cur = cur.right;}return true;}
4.从BST中删除一个节点
思路:1.找到key 2.若key是叶子节点,直接删 3.若key只有左或右子树,直接隔过Node(key)接上其左或右子树... 4.若key既有左子树又有右子树,找到其左子树的最右边的节点rightest,用rightest代替key节点...然后接着从第二步开始判断如何把rightest删掉...
public static Node deleteNodeFromBST(Node root, int key) {if (root == null) return null;if (key < root.data) {root.left = deleteNodeFromBST(root.left, key);} else if (key > root.data) {root.right = deleteNodeFromBST(root.right, key);} else {//找到keyif (root.left == null) {return root.right;} else if (root.right == null) {return root.left;}//有左右子树的情况...Node tmp = root;//找到root左子树中最右边的那个Node, 这里只能从tmp去遍历root = findRightest(tmp.left);root.left = deleteRightest(tmp.left);root.right = tmp.right;}return root;}// 找到左子树中最右的那个Node,因为它是root左子树的最大值...private static Node findRightest(Node root) {if (root == null) return null;while (root.right != null) {root = root.right;}return root;}// 删除刚刚从发现的那个点(root左子树中最右边的那个rightest)// 因为是最右面的Node,则必然没有右子树private static Node deleteRightest(Node root) {if (root.right == null)return root.left;root.right = deleteRightest(root.right);return null;}
转载于:https://www.cnblogs.com/zhaoqi3215/p/5296979.html
树和二叉树总结(三)—BST二叉排序树相关推荐
- 数据结构之树和二叉树的应用:二叉排序树(BST)
树和二叉树的应用:二叉排序树 思维导图: 二叉排序树的定义: 二叉排序树节点结构: 二叉排序树的查找: 二叉排序树的插入: 二叉排序树的构造: 二叉排序树的删除: 二叉排序树先删除再插入某个相同值的节 ...
- 树、二叉树、满二叉树、完全二叉树概念分清
自由树 自由树是一个连通的,无回路的无向图. 令G=(V,E)为一个无向图.下面的表述是等价的. 1) G是自由树. 2) G中任意两个顶点由唯一一条简单路径得到. 3) ...
- 树和二叉树(四种遍历,建树)详解+二叉排序树(包含图像和相关习题)
目录 树和二叉树 一.树 2.有序树和无序树 3.森林 4.树的基本性质 二.二叉树的概念 (1)二叉树的编号 1.二叉树和度为2的有序树的区别: 2.满二叉树 3.完全二叉树: 4.平衡二叉树: 5 ...
- Java开发 - 树(二叉树,二叉排序树,红黑树)
目录 前言 你好,认识一下,我是树 二叉树与二叉排序树 二叉排序树特点 为什么说二叉排序树查询效率要高于链表呢? 元素的类型 比较器 手写二叉排序树 定义一棵二叉树 增加元素 查询元素 修改元素 删除 ...
- 树与二叉树——二叉排序树
1.二叉排序树的定义 二叉排序树: 1)或者是一棵空树. 2)或者是具有下列性质的二叉树: [1]若它的左子树不空,则左子树上所有的结点的值都小于它的根节点的值: [2]若它的右子树不空,则右子树上所 ...
- (树)判断二叉树是否为BST
题目:判断一颗二叉树是否为BST. 思路:其实这个问题可以有多个解决方法. 方法一:递归解决.根据BST的特性.左边的小于根节点的值,右边的大于根节点的值.并且对于每一棵子树都是如此.所以我们可以直接 ...
- 树、二叉树、二叉搜索树_检查二叉树是否为BST(二叉搜索树)
树.二叉树.二叉搜索树 Description: 描述: This article describes how to check whether a given tree is BST or not? ...
- 天勤数据结构:树与二叉树(图解二叉树的三种遍历方式执行流程,超详细)
数据结构(第六章) 树与二叉树 1. 树与二叉树的相互转换 2. 森林与二叉树的相互转换 3. 二叉树的遍历 3.1 层序遍历(广度优先遍历) 2. 深度优先遍历 3. 树转化为二叉树的遍历 将一颗 ...
- 数据结构-王道-树和二叉树
[top] 树和二叉树 树:是\(N(N\geq0)\)个结点的有限集合,\(N=0\)时,称为空树,这是一种特殊情况.在任意一棵非空树中应满足: 有且仅有一个特定的称为根的结点. 当\(N>1 ...
- 王道计算机考研 数据结构 (树与二叉树)
第五章.树与二叉树 5.1.1_树的定义和基本术语 树的基本概念 结点.树的属性描述 有序树vs无序树 树vs森林 思维导图 5.1.2_树的性质 考点1 考点2 考点3 考点4 考点5 考点6 思维 ...
最新文章
- PL/SQL ——分页编程
- Roger Ver:BCH也可成为价值储备,前提是它被用起来
- 火车站购票系统c语言编程,用c语言编写火车购票系统怎么编写,在线等,急!!!...
- 同时打开两个excel工作窗口
- mysql boost 5.7.21_mysql 5.7.21 安装配置方法图文教程(window)
- ASP.net报错汇总: This application is currently offline.
- 云存储是否能拯救数据泛滥
- AnySDK项目实战教程
- 【houdini vex】边界点提取与扩展
- 1994年联想大调整,杨元庆上位,能赚钱的“书呆子”倪光南却走了
- 迅雷下载百度网盘的资源
- 谷歌访问英文网站翻译为中文
- 冰冻三尺,非一日之寒。数据解析——bs4
- 三星s8自带测试硬件软件,屏幕素质测试 三星S8表现较好_手机评测-中关村在线...
- Android开启指纹验证
- Obsidian笔记最新版本的功能Callouts,提升方便性和美观程度
- 每天坚持收小钱,能改命!
- 战神引擎独立端全套搭建教程
- NXP JN5169 UART 波特率设置
- MySQL学习笔记(1)——高可用组复制
热门文章
- python 中的copy与deepcopy
- CB Loss:基于有效样本的类别不平衡损失
- 【过拟合】再也不用担心过拟合的问题了
- 【AAAI2021】NLP所有方向论文列表(情感分析、句法、NER、对话/问答、关系抽取、KD等)...
- 【综述笔记】Graph Neural Networks in Recommender Systems
- 【工大SCIR笔记】多模态信息抽取简述
- 【长文详解】从Transformer到BERT模型
- 【福利】本人自学深度学习的300G的学习资料愿与大家分享!一起进步!
- 【python】Tkinter可视化窗口(三)
- seaborn—seaborn.boxplot绘制箱型图