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

树是一种特殊的数据类型,模拟具有树状结构数的集合
《【树的特点】》:
  每个节点都有零个或多个子节点;
  没有父节点的节点为根节点;
  每一个非根节点有且只有一个父节点
   除了根节点外,每个子节点可以分为多个不想交的子树
树的术语:
 【节点的度】:某个节点所分出的下一级子节点的个数
 【树的度】:所有节点中,最大的节点的度即为数的度
 【叶子节点/终端节点】:度为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
而如果没有中序遍历结果,此时无法树分成左右两部分,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值