[DS] 树的一些基本概念

术语#

  • Root 没有父节点的节点。
  • Siblings 有相同父节点的节点。
  • Internal node 至少有一个子节点的节点。
  • External node 没有子节点的节点。
  • Ancestors of a node 父节点,父节点的父节点...
  • Descendant of a node 子节点,子节点的子节点...
  • Depth of a node 祖先节点的个数。
  • Height of a tree 所有节点中的最大深度。
  • Degree of a node 子节点的个数。
  • Degree of a tree 树中所有节点度的最大值。
  • Subtree 一个节点和其所有子孙节点组成的树。

二叉树#

定义:一个树,每个内部节点,最多只有两个子节点,每个节点的子节点是有序的,一般称为left child和right child。
递归的定义:一个树有一个单个根节点,或者一个树其根节点有两个有序的子节点,每个节点又是一个二叉树的根节点。

二叉树最大的节点数#

  • 某个深度的最大节点数:2ii是深度,这个好理解,因为每层的最大节点数是2,4,8,16...这样增长的。
  • 二叉树的最大节点数: 2k+11,把每层相加就好i=0k2i=2k+11

叶子节点和度2节点的关系#

对于非空二叉树T,n0为叶子节点数,而n2是度2节点数,则有n0=n2+1

n,B分别为二叉树的节点总数和二叉树的分叉数,n0,n1,n2分别为度0,1,2节点的个数,则有B+1=nB=n1+n2,联立消去B,则有n1+2n2+1=n,又有n0+n1+n2=n,则得出n0=n2+1

满二叉树#

给定高度k,一共有2k+11个节点的二叉树,是满二叉树。

用数字来标记二叉树,从上到小,从左到右,数字依次递增。

  • 对于节点i来说,他的父节点为i/2,除了i=1
  • 对于节点i来说,它的左子节点为2i,除了2i>n,此时其没有左子节点。又子节点为2i+1同理。

完全二叉树#

相对于满二叉树来说,完全二叉树最后一层不是满的,也就是说,最后一层的节点个数不是2i但要大于1。

二叉树的存储#

两种方式,一种是链式结构,一种是连续的数组方式。

  • 链式结构,每个节点是数据单元 + 两个指向子节点的指针,对于链式的结构,会有n+1个 NULL的指针
  • 连续数组结构,用数组的索引来区分节点,例如A[1]是根,A[2],A[3]是A[1]的子节点

二叉树的遍历#

  • 先序遍历:先遍历当前节点,再遍历左子树,再遍历右子树。
  • 中序遍历:先遍历左子树,再遍历当前节点,再遍历右子树。
  • 后序遍历:先遍历左子树,再遍历右子树,再遍历当前节点。

作者:芒果和小猫

出处:https://www.cnblogs.com/WAoyu/p/13153991.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   芒果和小猫  阅读(210)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu