二叉排序树的特点:中序遍历是递增的…

下面复习几个常用的操作:

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二叉排序树相关推荐

  1. 数据结构之树和二叉树的应用:二叉排序树(BST)

    树和二叉树的应用:二叉排序树 思维导图: 二叉排序树的定义: 二叉排序树节点结构: 二叉排序树的查找: 二叉排序树的插入: 二叉排序树的构造: 二叉排序树的删除: 二叉排序树先删除再插入某个相同值的节 ...

  2. 树、二叉树、满二叉树、完全二叉树概念分清

    自由树 自由树是一个连通的,无回路的无向图. 令G=(V,E)为一个无向图.下面的表述是等价的. 1)        G是自由树. 2)        G中任意两个顶点由唯一一条简单路径得到. 3)  ...

  3. 树和二叉树(四种遍历,建树)详解+二叉排序树(包含图像和相关习题)

    目录 树和二叉树 一.树 2.有序树和无序树 3.森林 4.树的基本性质 二.二叉树的概念 (1)二叉树的编号 1.二叉树和度为2的有序树的区别: 2.满二叉树 3.完全二叉树: 4.平衡二叉树: 5 ...

  4. Java开发 - 树(二叉树,二叉排序树,红黑树)

    目录 前言 你好,认识一下,我是树 二叉树与二叉排序树 二叉排序树特点 为什么说二叉排序树查询效率要高于链表呢? 元素的类型 比较器 手写二叉排序树 定义一棵二叉树 增加元素 查询元素 修改元素 删除 ...

  5. 树与二叉树——二叉排序树

    1.二叉排序树的定义 二叉排序树: 1)或者是一棵空树. 2)或者是具有下列性质的二叉树: [1]若它的左子树不空,则左子树上所有的结点的值都小于它的根节点的值: [2]若它的右子树不空,则右子树上所 ...

  6. (树)判断二叉树是否为BST

    题目:判断一颗二叉树是否为BST. 思路:其实这个问题可以有多个解决方法. 方法一:递归解决.根据BST的特性.左边的小于根节点的值,右边的大于根节点的值.并且对于每一棵子树都是如此.所以我们可以直接 ...

  7. 树、二叉树、二叉搜索树_检查二叉树是否为BST(二叉搜索树)

    树.二叉树.二叉搜索树 Description: 描述: This article describes how to check whether a given tree is BST or not? ...

  8. 天勤数据结构:树与二叉树(图解二叉树的三种遍历方式执行流程,超详细)

    数据结构(第六章) 树与二叉树 1. 树与二叉树的相互转换 2. 森林与二叉树的相互转换 3. 二叉树的遍历 3.1 层序遍历(广度优先遍历) 2. 深度优先遍历 3. 树转化为二叉树的遍历 将一颗 ...

  9. 数据结构-王道-树和二叉树

    [top] 树和二叉树 树:是\(N(N\geq0)\)个结点的有限集合,\(N=0\)时,称为空树,这是一种特殊情况.在任意一棵非空树中应满足: 有且仅有一个特定的称为根的结点. 当\(N>1 ...

  10. 王道计算机考研 数据结构 (树与二叉树)

    第五章.树与二叉树 5.1.1_树的定义和基本术语 树的基本概念 结点.树的属性描述 有序树vs无序树 树vs森林 思维导图 5.1.2_树的性质 考点1 考点2 考点3 考点4 考点5 考点6 思维 ...

最新文章

  1. PL/SQL ——分页编程
  2. Roger Ver:BCH也可成为价值储备,前提是它被用起来
  3. 火车站购票系统c语言编程,用c语言编写火车购票系统怎么编写,在线等,急!!!...
  4. 同时打开两个excel工作窗口
  5. mysql boost 5.7.21_mysql 5.7.21 安装配置方法图文教程(window)
  6. ASP.net报错汇总: This application is currently offline.
  7. 云存储是否能拯救数据泛滥
  8. AnySDK项目实战教程
  9. 【houdini vex】边界点提取与扩展
  10. 1994年联想大调整,杨元庆上位,能赚钱的“书呆子”倪光南却走了
  11. 迅雷下载百度网盘的资源
  12. 谷歌访问英文网站翻译为中文
  13. 冰冻三尺,非一日之寒。数据解析——bs4
  14. 三星s8自带测试硬件软件,屏幕素质测试 三星S8表现较好_手机评测-中关村在线...
  15. Android开启指纹验证
  16. Obsidian笔记最新版本的功能Callouts,提升方便性和美观程度
  17. 每天坚持收小钱,能改命!
  18. 战神引擎独立端全套搭建教程
  19. NXP JN5169 UART 波特率设置
  20. MySQL学习笔记(1)——高可用组复制

热门文章

  1. python 中的copy与deepcopy
  2. CB Loss:基于有效样本的类别不平衡损失
  3. 【过拟合】再也不用担心过拟合的问题了
  4. 【AAAI2021】NLP所有方向论文列表(情感分析、句法、NER、对话/问答、关系抽取、KD等)...
  5. 【综述笔记】Graph Neural Networks in Recommender Systems
  6. 【工大SCIR笔记】多模态信息抽取简述
  7. 【长文详解】从Transformer到BERT模型
  8. 【福利】本人自学深度学习的300G的学习资料愿与大家分享!一起进步!
  9. 【python】Tkinter可视化窗口(三)
  10. seaborn—seaborn.boxplot绘制箱型图