首页 > 其他分享 >有序二叉树简介

有序二叉树简介

时间:2024-10-31 15:16:26浏览次数:6  
标签:左子 结点 遍历 parent 简介 二叉树 有序 root

有序二叉树

有序二叉树:左边的结点值小于当前结点,右边结点值大于当前结点。

有序二叉树结点模型

root表示指向根结点的指针。

构建有序二叉树

判断root是否为null

  • root为空,root = node
  • 如果 root 不为空,定义index 游标,初始值 == root 。判断index 和 node 结点值的大小

二叉树的遍历

广度优先遍历

从上到下遍历整棵树,同一层从左到右遍历每个结点。

遍历顺序:A B C D E F G H

借助底层使用链表的队列实现:

根结点入队,只要队列不是空,就从队列中一直拿取数据,并将结点的左右孩子入队。

深度优先遍历

先序遍历: 父 左 右。使用递归输出。A B D H E C F G

中序遍历:左 父 右。H D B E A F C G

后序遍历:左 右 父。H D E B F G C A

先序遍历:5 7 2 0 8 6 4 3 9 1

中序遍历:2 7 8 0 6 5 3 9 4 1

后序遍历:2 8 6 0 7 9 3 1 4 5

有序二叉树的删除

删除叶子结点

  1. 找到要删除的结点 target

  2. 找到要删除结点的父结点parent

    1. 如果没有父结点,而且本身就是叶子结点,则该树只有这一个结点,将root设置为空

    2. 如果有父结点,判断目标结点是父结点的右孩子还是左孩子。

      1. 如果是左孩子,则让parent的左孩子指针设为null,parent.left = null。

      2. 如果是右孩子,则让parent的右孩子指针设为null,parent.right = null。

删除只有一棵子树的结点

  1. 找到要删除结点target

  2. 找到要删除的结点的父结点parent

    1. 如果没有父结点

      1. 自己是根结点,且只有左子树。root直接指向左子树结点。root = root.left。绿色结点下面的结点不受波及,直接保留原状即可。

      2. 自己是根节点,且只有右子树。root直接指向右子树结点。root = root.right。绿色结点下面的结点不受波及,直接保留原状即可。

    2. 如果有父结点

      1. 如果目标结点是父结点的左孩子

        1. 如果目标有左子树:parent .left = target.left

        2. 如果目标有右子树:parent.right = target.right

      2. 如果目标结点是父结点的右孩子

        1. 如果目标有左子树:parent.right = target.left

        2. 如果目标有右子树:parent.left = target.right

删除有两棵子树的结点

找到左子树的最大值或者找右子树的最小值作为根结点,这两个找到任意一个即可,这两个都是叶子节点。

  1. 找到要删除的节点

  2. 找到目标节点左子树的最大值,或右子树的最小值

  3. 目标节点左子树的最大值,或右子树的最小值,直接替换target的值

  4. 删除替换的结点

标签:左子,结点,遍历,parent,简介,二叉树,有序,root
From: https://blog.csdn.net/m0_75260099/article/details/143402429

相关文章

  • 【数据结构多彩画卷】不要只会普通的二叉树了 , 你听说过用二叉树来排序吗? 【二叉搜索
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • 代码随想录算法训练营第十二天| 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大
    226.翻转二叉树题目链接:.-力扣(LeetCode)文章讲解:代码随想录视频讲解:听说一位巨佬面Google被拒了,因为没写出翻转二叉树|LeetCode:226.翻转二叉树_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦!快来打卡!本期视频的文字讲解版在「代码随想录」刷题网站:programmercarl.com......
  • 代码随想录算法训练营第十三天| 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子
    110.平衡二叉树题目链接:.-力扣(LeetCode)文章链接:代码随想录视频链接:后序遍历求高度,高度判断是否平衡|LeetCode:110.平衡二叉树_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦!快来打卡!本期视频的文字讲解版在「代码随想录」刷题网站:programmercarl.com,这里刷题顺序,详......
  • 揭秘AI档案管理:让海量数据井然有序的魔法
    揭秘苏哒AI档案管理:让海量数据井然有序的魔法在这个信息爆炸的时代,无论是企业还是政府机构,每天都在产生大量的文档资料。如何高效地管理和利用这些信息资产成为了大家都在思考的难题。当今随着AI技术的发展,我们有了新的解决方案——苏哒智能可以通过AI技术来优化档案管理,不仅......
  • 给定一个二叉树,找出其最大深度
      文心快码(BaiduComate)是基于百度文心大模型,在研发全流程全场景下为开发者提供辅助建议的智能代码助手。结合百度积累多年的编程现场大数据、外部优秀开源数据,可为开发者生成更符合实际研发场景的优秀代码,提升编码效率,释放“十倍”软件生产力。......
  • 大模型提示词简介 举例
    目录大模型提示词(Prompt)详解1.什么是AI提示词(Prompt)2.为什么提示词对AI结果的影响很大3.提示词构成4.提示词举例示例1:生成新闻标题示例2:创作诗歌示例3:撰写电子邮件示例4:解答数学题示例5:翻译句子大模型提示词(Prompt)详解随着人工智能技术的飞速发展,自然语言处......
  • InnoDB存储引擎、多版本并发控制(MVCC)简介、Redis简介
    (一)InnoDB存储引擎InnoDB是MySQL最常用的存储引擎之一,有支持事务处理、行级锁定和外键约束等高级功能而著称。1、InnoDB架构物理结构表空间:InnoDB的数据存储空间在表空间中,表空间可以分为系统表空间、文件表空间和通用表空间。系统表空间:默认存储在ibdata1文件中,包含系统......
  • P 7-1 二叉树的遍历!(简单)
    二叉树作为FDS课程最核心的数据结构之一,要求每个人都掌握!这是一道简单的二叉树问题!我们将给出一颗二叉树,请你输出它的三种遍历,分别是先序遍历,中序遍历,后序遍历!输入格式:二叉树将以这样的形式给出:第一行给出一个正整数N(N<=100),表示二叉树上的节点个数!接下来N行,每行包含三......
  • 【转载】LLVM 简介
    LLVM简介(一) LLVM项目LLVM是一个开源的项目,是一个编译器框架,是一系列模块化、可重用的编译器以及工具链技术的集合。LLVM的核心是LLVM库。同时LLVM还实现了一些周边工具。LLVM的一个设计思想是优化可以渗透在整个编译流程中各个阶段,比如编译时、链接时、运行时等。......
  • 代码随想录day14 二叉树(2)
    文章目录day11栈与队列(2)栈与队列的总结day13二叉树(1)day14二叉树(2)day11栈与队列(2)逆波兰表达式求值https://leetcode.cn/problems/evaluate-reverse-polish-notation/逆波兰表达式,也就是后缀表达式,所谓后缀就是指运算符写在后面。平常使用的算式则是一种......