数据结构-二叉树(概念、遍历)

散落知识点

  1. 树是一种半线性结构

  2. 二叉树(每个节点最多只有两个孩子)(有根性、有序的)

  3. 深度为K的节点,至多 2 k 2^k 2k

  4. 含有n个节点、高度为h的树, h < n < 2 h + 1 hh<n<2h+1

  5. 深度:对于任意节点n,n的深度,是该店到根的路径,跟的深度为0

  6. 高度:对于任意节点n,n的高度,是该点到一片树叶的最长路径常,所有树叶的高度为0

  7. 满二叉树:饱和状态
    数据结构-二叉树(概念、遍历)_第1张图片
    二叉树容易长宽,不容易长高。

  8. 真二叉树:每个几点出度,要么是2,要么是0,不会出现1.

  9. 完全二叉树:节点从左到右排列(堆的实现)

通过二叉树描述多叉树

条件:

  1. 有根
  2. 有序
    换表示方法,然后旋转45°
    数据结构-二叉树(概念、遍历)_第2张图片

不要从轮子造起!!!!!!

遍历

说法是按照根的顺序
数据结构-二叉树(概念、遍历)_第3张图片

先序遍历(迭代)

尾递归,用一个栈
数据结构-二叉树(概念、遍历)_第4张图片

  1. 压入当前节点x
  2. 弹出当前节点,随机访问
  3. 如果有右孩子,右孩子进栈
  4. 如果有左孩子,左孩子进栈
    因为栈的特性,先进后出

但是这种方法不容易应用到中序、后序

另一个迭代方法

数据结构-二叉树(概念、遍历)_第5张图片

两个顺序,先顺序向左,在自底向上右孩子
数据结构-二叉树(概念、遍历)_第6张图片

中序遍历

数据结构-二叉树(概念、遍历)_第7张图片
算法实例
数据结构-二叉树(概念、遍历)_第8张图片

复杂度分析

  1. 递归,看起来是O(N),但是很慢
    分摊分析,每个节点智慧进行一次入栈,不会是N方的。

层次遍历

用队列

数据结构-二叉树(概念、遍历)_第9张图片

树的重构

需要中序遍历 和 前序/后序,可以重构一棵树

总结

概念

深度: 根到当前点的路径长度
**高度:**当前点到叶子的最长路径长度
满二叉树
真二叉树
完全二叉树
树的高度和节点数的关系

遍历算法

前序

简单的用一个栈,先左孩子,后右孩子:
数据结构-二叉树(概念、遍历)_第10张图片

前序版本2

考虑整体的访问顺序,搞一个左访问链
数据结构-二叉树(概念、遍历)_第11张图片
主函数:
数据结构-二叉树(概念、遍历)_第12张图片

中序遍历

也是一样的,考虑一个左访问链,只是这次是go,不是visit,访问到最后一个再visit。
数据结构-二叉树(概念、遍历)_第13张图片

你可能感兴趣的:(数据结构,二叉树,数据结构,算法,遍历,递归)