ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

树的基础知识

2022-02-23 17:04:59  阅读:154  来源: 互联网

标签:左子 结点 遍历 右子 基础知识 子树 二叉树


定义:n个结点构成的有限集合;

根结点:root,用r表示;其余结点可分为m个互不相交的子集,称为原来树的子树;

树的特点:

  • 子树互不相交
  • 除了根结点每个结点有且仅有一个父结点
  • N个结点的树有N-1个边

非树:

image-20220223092931196

基本术语:

  • 结点的度(Degree):结点的子树个数
  • 树的度:树中所有结点中最大的度数
  • 叶结点(leaf):度为0的结点
  • 父结点(Parent):有子树的结点是其子树的根结点的父结点
  • 子结点(Child):和父结点相对应
  • 兄弟结点(Sibling):具有同一父结点的各结点彼此是兄弟结点
  • 路径和路径长度:从一个结点到另一个结点称为路径,包含的边数称为路径长度
  • 祖先结点(Ancestor):从树根往上的每个结点都是其祖先结点
  • 子孙结点(Descendant):某一结点子树中的所有结点都为其子孙结点
  • 结点的层次(Level):根结点为第一层,往下加一
  • 树的深度(Depth):书中所有结点最大层次为树的深度

树的表示:儿子兄弟表示法

image-20220223094721023
二叉树
image-20220223094852077

定义:一个有穷的结点集合,若不为空,由根结点左子树TL、==右子树TR==两个不想交的二叉树组成。

二叉树的五种基本形态:

  • 空树
  • 只有一个结点
  • 只有左子树
  • 只有右子树
  • 左右子树都有

二叉树的子树有左右之分

特殊二叉树:

  • 斜二叉树:一边倒,形成链表
  • 完美二叉树/满二叉树:除了最下一层每个结点都有两个子结点
  • 完全二叉树:满二叉树最下一层从右边缺失一部分,左边是连续的

二叉树的重要性质:

  • 第i层最大结点数2i-1
  • 深度为k的二叉树总结点数2k-1
  • n0:叶结点的个数,n2:度为2的结点个数;满足关系:n0= n2+1(可通过边的关系证明)

常用遍历方法:

  • 先序:根,左子树,右子树
  • 中序:左子树,根,右子树
  • 后续:左子树,右子树,根
  • 层次遍历:从上到下,从左到右

存储结构:

  • 顺序存储:完全二叉树(父结点i/2,左子树根结点2i,右子树根结点2i+1),一般二叉树可留空位(造成空间浪费)
  • 链表存储:两个指针分别指向左子树和右子树

递归遍历:先序中序后序遍历过程中经过的结点顺序一样,只是访问时机不同

  • 先序遍历
image-20220223105227934
  • 中序遍历
image-20220223105259235
  • 后序遍历
image-20220223105405348

中序遍历非递归遍历算法:使用堆栈,遇到结点就压栈,左子树遍历完出栈,然后遍历右子树

层序遍历:使用队列,遇到节点,节点出队列,左右子结点进队列

二叉搜索树

非空二叉搜索树性质:

  • 非空左子树的键值小于根结点的键值
  • 非空右子树的键值大于根结点的键值
  • 左右子树都是二叉搜索树

删除结点:

  • 若为叶结点直接删除
  • 只有一个子结点,删除后父结点成为子结点的父结点
  • 有两个子结点,用另一结点替代要删除的结点(右子树最小元素或者左子树最大元素根据二叉树性质,这两个结点一定没有两个子结点
平衡二叉树(AVL树)

平衡因子(Balance Factor):BF(T)=hL-hR (分别代表左右子树的高度)

平衡二叉树:非空树左右子树高度的绝对差不超过1(平衡因子的绝对值小于等于1)

image-20220223144215081

h=O(log2n)

平衡二叉树的调整:平衡二叉树也是搜索树,插入结点时会破坏平衡,所以需要调整。

  • RR旋转(右单旋)
image-20220223162203602 image-20220223162538975
  • LL旋转(左单旋)
image-20220223162941463
  • LR旋转
image-20220223163214448
  • RL旋转
image-20220223163714392

标签:左子,结点,遍历,右子,基础知识,子树,二叉树
来源: https://blog.csdn.net/weixin_44736530/article/details/123094282

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有