算法与数据结构——二叉树

树是一种特殊的数据类型,模拟具有树状结构数的集合
《【树的特点】》:
  每个节点都有零个或多个子节点;
  没有父节点的节点为根节点;
  每一个非根节点有且只有一个父节点
   除了根节点外,每个子节点可以分为多个不想交的子树
树的术语:
 【节点的度】:某个节点所分出的下一级子节点的个数
 【树的度】:所有节点中,最大的节点的度即为数的度
 【叶子节点/终端节点】:度为0的节点
 【兄弟节点】:拥有相同的父节点的节点
 【节点的层次】:从根节点开始算起,记为第一层,根节点的子节点为第二层,依次类推
 【树的高度或深度】:书中节点的最大层次
 【堂兄弟节点】:节点的父节点在同一层的节点互称堂兄弟节点
 【节点的祖先】:从根节点到该节点的一条路径上的所有直系节点

【《树的种类》】:
  无序树(自由树):节点之间没有任何顺序关系(自己指定的)
  有序树:节点之间有顺序关系
    有序树又可分为【二叉树】  【霍夫曼树】  【B树】
    二叉树:节点的度最高为2,即一个节点的子节点最多两个,分为完全二叉树 满二叉树 平衡二叉树 排序二叉树
    【完全二叉树】:除了最高层外,其它层都应该达到最大的度
    【满二叉树】:所有的层都要达到最大数量
    【平衡二叉树】:当且仅当节点的任意两个子树的深度差不大于1
    【排序二叉树】:见下图类似

在这里插入图片描述

树的存储

存放的时候是一种链式存储,
自根节点开始存储,自上而下,一行一行的存,父节点中会存放子节点的位置,
在这里插入图片描述
节点类似于链表,同时又存在差异,链表只有一个后继链接,而树每个节点有两个及以上的链接

二叉树

子树通常称为“左子树” 和 “右子树”
 二叉树的性质:
   【】在第i层,最多有in-1个节点
   【】深度为k的二叉树,最多有 2k-1个节点
   【】如果二叉树的叶子节点数为N1,度数为2的节点数为N2,则N1=N2+1
   【】具有n个节点的完全二叉树的深度为log2(n+1)
 广度优先遍历(层次遍历):一层一层从左到右遍历,
 完全二叉树用代码实现的过程是一个从前部取出元素进行操作(查看是否有子树,两个子树则向后,不满则追加),而在最后的位置进行追加元素
    
 **深度遍历**的方式:先序遍历(先根节点 左节点 右节点)  中序遍历(先左子节点\根节点\右节点) 后序遍历(做节点 右节点\根节点)

在这里插入图片描述
在这里插入图片描述    在这里插入图片描述    在这里插入图片描述
0 1 3 7 8 4 9 2 5 6
在这里插入图片描述    在这里插入图片描述    在这里插入图片描述
7 3 8  1 9 4 0 5 2 6
在这里插入图片描述    在这里插入图片描述   在这里插入图片描述
7 8 3 9 4 1 5 6 2 0

17:27分钟

根据遍历出的数字的顺序,来画出一棵树
要求,给的顺序中,必须包含中序的,在加上任意一个另外的顺序就可以画出一棵树。因为中序遍历情况下,根节点能够将左右节点分来成两部分,
先序:0 1 3 7 8 4 9 2 5 6
中序:7 3 8 1 9 4 0 5 2 6
先序给出根节点是0,在中序中找到0的位置,可知,0左边【738194】的是0的左子树,而右边的【526】是右子树,多次重复这样的过程,即可确定一棵树
后序:7 8 3 9 4 1 5 6 2 0
中序:7 3 8 1 9 4 0 5 2 6
后序给出的最后一个数字0是整棵树的根节点,同样中序中的0左边的数字是左子树的数字,右边是右子树的数字
先序:0 1 3 7 8 4 9 2 5 6
后序:7 8 3 9 4 1 5 6 2 0
而如果没有中序遍历结果,此时无法树分成左右两部分,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 什么是二叉树二叉树是一种树形结构,其中每个节点最多有两个子节点。一个节点的左子节点比该节点小,右子节点比该节点大。二叉树通常用于搜索和排序。 2. 二叉树的遍历方法有哪些? 二叉树的遍历方法包括前序遍历、中序遍历和后序遍历。前序遍历是从根节点开始遍历,先访问根节点,再访问左子树,最后访问右子树。中序遍历是从根节点开始遍历,先访问左子树,再访问根节点,最后访问右子树。后序遍历是从根节点开始遍历,先访问左子树,再访问右子树,最后访问根节点。 3. 二叉树的查找方法有哪些? 二叉树的查找方法包括递归查找和非递归查找。递归查找是从根节点开始查找,如果当前节点的值等于要查找的值,则返回当前节点。如果要查找的值比当前节点小,则继续在左子树中查找;如果要查找的值比当前节点大,则继续在右子树中查找。非递归查找可以使用栈或队列实现,从根节点开始,每次将当前节点的左右子节点入栈/队列,直到找到要查找的值或者栈/队列为空。 4. 二叉树的插入与删除操作如何实现? 二叉树的插入操作是将要插入的节点与当前节点的值进行比较,如果小于当前节点的值,则继续在左子树中插入;如果大于当前节点的值,则继续在右子树中插入。当找到一个空节点时,就将要插入的节点作为该空节点子节点。删除操作需要分为三种情况:删除叶子节点、删除只有一个子节点节点和删除有两个子节点节点。删除叶子节点很简单,只需要将其父节点的对应子节点置为空即可。删除只有一个子节点节点,需要将其子节点替换为该节点的位置。删除有两个子节点节点,则可以找到该节点的后继节点(即右子树中最小的节点),将其替换为该节点,然后删除后继节点。 5. 什么是平衡二叉树? 平衡二叉树是一种特殊的二叉树,它保证左右子树的高度差不超过1。这种平衡可以确保二叉树的查找、插入和删除操作的时间复杂度都是O(logn)。常见的平衡二叉树包括红黑树和AVL树。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值