首页 > 其他分享 >2.二叉树

2.二叉树

时间:2024-10-27 23:44:59浏览次数:7  
标签:左子 遍历 中序 右子 二叉树 节点

二叉树 Binary Tree:

1.特点:

  • 一种非线性数据结构,代表“祖先”与“后代”之间的派生关系
  • 二叉树的基本单元是节点,每个节点至少包含左子节点引用右子节点引用
  • 二叉树中,除叶节点外,其他所有节点都包含子节点和非空子树

2.概念:

名词 解释
根节点(root node) 位于二叉树顶层的节点,没有父节点。
叶节点(leaf node) 没有子节点的节点,其两个指针均指向 None 。
边(edge) 连接两个节点的线段,即节点引用(指针)。
二叉树的高度(height) 从根节点到最远叶节点所经过的边的数量。
节点所在的层(level) 从顶至底递增,根节点所在层为 1 。
节点的度(degree) 节点的子节点的数量。在二叉树中,度的取值范围是 0、1、2 。
节点的深度(depth) 从根节点到该节点所经过的边的数量。
节点的高度(height) 从距离该节点最远的叶节点到该节点所经过的边的数量。
  • 图解:

3.常见二叉树类型:

完美二叉树/满二叉树:

  • 特点:
    • 所有层的节点都被完全填满
    • 叶节点的度为0,其余所有节点的度都为2

完全二叉树:

  • 特点:
    • 只有最底层的节点未被填满,且最底层节点尽量靠左填充

完满二叉树:

  • 特点:
    • 除了叶节点之外,其余所有节点都有两个子节点

平衡二叉树:

  • 特点:
    • 任意节点的左子树和右子树的高度之差绝对值不超过1

4.二叉树的遍历:

层序遍历:

  • 遍历逻辑:从顶部到底部逐层遍历二叉树,并在每一层按照从左到右的顺序访问节点(类比队列,一般用队列实现)
  • 属于广度优先遍历,也称广度优先搜索(breadth-first search, BFS

前序、中序、后序遍历:

  • 遍历逻辑:从顶部到底部逐层遍历二叉树,先走到尽头,再回溯继续(类比递归,一般用递归方式实现)
  • 前序、中序、后序指的是根的打印顺序:根左右、左根右、左右根
  • 都属于深度优先遍历,也称深度优先搜索(depth-first search, DFS

5.二叉搜索树(节点值有序):

  • 特点:
    • 对于根节点,左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值有序特性
    • 任意节点的左、右子树也是二叉搜索树,即同样满足条件 1
  • 二叉搜索树的查找操作与二分查找算法的工作原理一致,都是每轮排除一半情况。循环次数最多为二叉树的高度,当二叉树平衡时,时间复杂度为O(logn)
  • 二叉搜索树不允许存在重复节点,否则将违反其定义
  • 二叉搜索树的中序遍历的结果序列是升序的

  • 常见操作:
    • 查找节点:
      • 比较待查找值与节点值;查找值小,则继续左子树;查找值大,则继续右子树。知道值匹配或者到达叶子节点
    • 插入节点:
      • 先查找到具体位置,插入到该位置(修改该位置的父节点指针,指向新节点)
    • 删除节点:
      • 删除节点为叶子节点,度为0,可以直接删除
      • 删除节点为非叶子节点:
        • 度为1,用待删除节点的唯一子节点替换掉待删除节点
        • 度为2,用该节点的右子树的最小节点左子树的最大节点(该节点一定是叶子节点),替换自己
          • 右子树的最小节点:中序遍历的下一个节点
          • 左子树的最小节点:中序遍历的最后一个节点

标签:左子,遍历,中序,右子,二叉树,节点
From: https://www.cnblogs.com/navyum/p/18509361

相关文章

  • 数据结构-------------二叉树后续(单链表实现二叉树)
    1:前中后序遍历在用链表实现二叉树的时候我们要首先了解一下二叉树的遍历,让我们来看一下二叉树都有那些遍历1.1 遍历规则按照二叉树的遍历规则遍历有:前序.中序.后序。(1)前序:首先访问根节点再去访问左右子树(访问顺序为:根结点、左⼦树......
  • 二叉树的三种遍历方式
    文章目录前言本文章讲解二叉树的三种遍历一、前序遍历1、理解前序遍历2、前序遍历代码二、中序遍历中序遍历代码三、后序遍历后序遍历代码总结前言本文章讲解二叉树的三种遍历前序遍历:先遍历根节点,然后是左节点,最后是右节点-----根左右中序遍历:先遍历左节点,然......
  • 数据结构与算法——Java实现 46. 从前序与中序遍历序列构造二叉树
    努力的意义大概就是当好运来临的时候你觉得你值得                                                ——24.10.24105.从前序与中序遍历序列构造二叉树给定两个整数数组 preorder 和 inorder ,其中 preorder 是......
  • 如何利用递归和迭代构建二叉树?详解题解
    文章目录根据二叉树创建字符串思路代码二叉树的层序遍历思路代码二叉树的最近公共祖先思路代码二叉搜索树与双向链表思路代码从前序与中序遍历序列构造二叉树思路代码总结根据二叉树创建字符串题目:样例:可以看见,唯一特殊的就是左子树,当右子树存在的时候左......
  • 【数据结构】树-二叉树-堆(上)
    ......
  • Java实现二叉树
    一、树型结构1.1概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。​层序遍历特点:有一个特殊的结点,称为根结点,根结点没有前驱结点除根结点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、......、Tm,其中每一个集合Ti......
  • 代码随想录算法训练营第24天(补第13天)|226.翻转二叉树, 101. 对称二叉树,104.二叉树的最
    226.翻转二叉树文章链接:https://programmercarl.com/0226.翻转二叉树.html#算法公开课题目链接:https://leetcode.cn/problems/invert-binary-tree/description/迭代法:这里使用了前序遍历来交换左右孩子节点classSolution{public:TreeNode*invertTree(TreeNode*r......
  • ReactOS系统中平衡二叉树,在一个空间中寻找与给定地址范围重合或部分重合的(已分配)区间
    在一个空间中寻找与给定地址范围重合或部分重合的(已分配)区间PMEMORY_AREANTAPIMmLocateMemoryAreaByRegion(PMADDRESS_SPACEAddressSpace,PVOIDAddress,ULONG_PTRLength);MmLocateMemoryAreaByRegion/******************************************************......
  • ReactOS系统中平衡二叉树。给定地址超导其所属区块MmFindRegion()
    系列文章目录PMM_REGIONNTAPIMmFindRegion(PVOIDBaseAddress,PLIST_ENTRYRegionListHead,PVOIDAddress,PVOID*RegionBaseAddress);宏函数//给定地址找到其中所属区块#defineCONTAINING_RECORD(address,type,field)((typeFAR*\(PCHAR)(address)-(PCH......
  • 力扣 简单 111.二叉树的最小深度
    文章目录题目介绍题解题目介绍题解最小深度:从根节点到最近叶子结点的最短路径上节点数量。分三种情况讨论即可:当前节点为空,则返回当前节点minDepth=0;当前节点左右子树都存在,则返回当前节点minDepth=左右子树最小深度的最小值+1;当前节点的左右子树其中一个不存......