数据结构--各种树的概念

先了解一下关于树的相关术语:

节点深度:对任意节点x,x节点的深度表示为根节点到x节点的路径长度。所以根节点深度为0,第二层节点深度为1,以此类推
节点高度:对任意节点x,叶子节点到x节点的路径长度就是节点x的高度 树的深度:一棵树中节点的最大深度就是树的深度,也称为高度
父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点 子节点:一个节点含有的子树的根节点称为该节点的子节点
节点的层次:从根节点开始,根节点为第一层,根的子节点为第二层,以此类推 兄弟节点:拥有共同父节点的节点互称为兄弟节点
:节点的子树数目就是节点的度 叶子节点:度为零的节点就是叶子节点
祖先:对任意节点x,从根节点到节点x的所有节点都是x的祖先(节点x也是自己的祖先)
后代:对任意节点x,从节点x到叶子节点的所有节点都是x的后代(节点x也是自己的后代) 森林:m颗互不相交的树构成的集合就是森林

在这里插入图片描述

在这里插入图片描述
树的种类
无序树,有序树,二叉树,满二叉树(完美二叉树),完全二叉树,完满二叉树,霍夫曼树(最优二叉树),二叉查找树(二叉搜索树、二叉排序树、BST),平衡二叉查找树(AVL树),红黑树,伸展树,替罪羊树,B树(B-树),B+树,B*树,字典树,线索二叉树

二叉树的遍历方法,动画演示看这里

  • 中序遍历:即左-根-右遍历,对于给定的二叉树根,寻找其左子树;对于其左子树的根,再去寻找其左子树;递归遍历,直到寻找最左边的节点i,其必然为叶子节点,然后遍历i的父节点,再遍历i的兄弟节点。随着递归的逐渐出栈,最终完成遍历
  • 先序遍历:即根-左-右遍历。从根节点开始,先获取根节点的值,然后获取左子树所有节点的值,最后获取所有右子树所有节点的值,其中对于子树的遍历也是递归按照这个规律。
  • 后序遍历:即左-右-根遍历
  • 层序遍历:按照树的层次一层一层遍历

有序树

无序树

二叉树
树的任意节点至多包含两棵子树

二叉树遍历:二叉树的遍历是指从二叉树的根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次。
二叉树的访问次序可以分为四种:前序遍历 中序遍历 后序遍历 层次遍历

满二叉树(完美二叉树)
①除了叶子节点,每一个节点都有两个子节点
②每一层都填满

完全二叉树
①除了最后一层,其他每一层都被填满
②优先填充左节点

完满二叉树
①除了叶子节点,每一个节点都有两个子节点

二叉查找树:特殊的二叉树
若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值
若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值
任意节点的左、右子树也分别为二叉查找树
没有键值相等的节点

平衡二叉查找树:特殊的二叉查找树
它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,同时,平衡二叉树必定是二叉搜索树

在这里插入图片描述红黑树:特殊的平衡二叉查找树,动画演示看这里

  • 查找,插入,删除的时间复杂度都是O(logn)
  • 节点只能是红色或者黑色
  • 根节点和叶节点是黑色的
  • 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点–>可以连续两个黑色节点)
  • 每个节点的左子树都小于自身,右子树都大于自身
  • 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点

使用场景:红黑树多用于搜索,插入,删除操作多的情况下
红黑树和AVL严格平衡二叉查找树相比:AVL查询时间复杂度<logn,比红黑树效率高,但是AVL为了保持严格的平衡,会在每次插入和删除时进行复杂的调整,相比而言红黑树插入和删除就很方便,所以对于经常插入和删除的场景下使用红黑树更好

B树(B-树):特殊的平衡多叉树

B+树:特殊的平衡多叉树

参考:https://zhuanlan.zhihu.com/p/90255760

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在外面要叫头哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值