第六章 二叉树理论基础

简介: 第六章 二叉树理论基础

一、二叉树分类

二叉树的分类为:

  • 满二叉树

如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树

这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树。

  • 完全二叉树

完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^h -1 个节点。

  • 二叉搜索树

二叉搜索树是有数值的了,二叉搜索树是一个有序树

  • 平衡二叉搜索树

平衡二叉搜索树:又被称为AVL(Adelson-Velsky and Landis)树,它是一棵空树,它的左右两个子树高度差的绝对值不超过1,并且左右子树都是一棵平衡二叉树。

C++中mapsetmultimapmultiset的底层实现都是平衡二叉搜索树,所以map、set的增删操作时间时间复杂度是logn,注意我这里没有说unordered_mapunordered_setunordered_mapunordered_map底层实现是哈希表。

二、二叉树的存储方式

二叉树既可以 链式存储,也可以 顺序存储

  • 链式存储:用指针

  • 顺序存储:用数组

三、二叉树的遍历方式

基于图论的二叉树主要有两种遍历方式:

  • 深度优先遍历(栈实现)

先往深处遍历,遇到叶子结点再往回遍历

  • 广度优先遍历(队列实现)

一层一层地遍历

四、二叉树的定义

二叉树节点定义:(有点类似于链表)

struct TreeNode{
    int val;
    TreeNode *left;
    TreeNode *right;
    //这是一个构造函数,构造函数也可以不写,
    //但是new一个新的节点的时候就比较麻烦。
    TreeNode(int val):val(val),left(NULL),right(NULL){}
};


目录
相关文章
|
3天前
|
算法
第七章 回溯算法理论基础
第七章 回溯算法理论基础
6 0
|
4天前
|
算法
第四章 KMP算法理论基础
第四章 KMP算法理论基础
8 0
|
7天前
|
存储 算法 编译器
探索二叉搜索树:理论与实践实现
探索二叉搜索树:理论与实践实现
16 0
|
18天前
|
存储
二叉树理论基础
二叉树理论基础
|
4月前
|
算法 数据挖掘 定位技术
算法必备数学基础:图论方法由浅入深实践与应用
算法必备数学基础:图论方法由浅入深实践与应用
|
存储 算法 JavaScript
二叉树理论基础篇
二叉树理论基础篇 二叉树的种类 满二叉树 完全二叉树 二叉搜索树 平衡二叉搜索树 二叉树的存储方式 二叉树的遍历方式 二叉树的定义 总结 其他语言版本
105 0
|
存储 算法 C++
深入浅出广度和深度优先搜索算法
广度优先搜索,通俗的理解就是,地毯式层层推进,从起始顶点开始,依次往外遍历。广度优先搜索需要借助队列来实现,遍历得到的路径就是起始顶点到终止顶点的最短路径。深度优先搜索用的是回溯思想,非常适合用递归。
168 0
|
算法 C++
算法基础系列第三章——图论之最小生成树问题(2)
算法基础系列第三章——图论之最小生成树问题(2)
91 0
算法基础系列第三章——图论之最小生成树问题(2)
|
存储 算法 C++
算法基础系列第三章——图论之最小生成树问题(1)
算法基础系列第三章——图论之最小生成树问题(1)
112 0
算法基础系列第三章——图论之最小生成树问题(1)
|
存储 算法
【数据结构与算法】第十一章:二叉树深入浅出
在二叉树的一些应用中,常常要求在数中查找具有某种特征的结点,或者是对树中的全部结点逐一进行处理,这就提出了一个遍历二叉树的问题。本章将详细介绍二叉树的存储和遍历。
169 0
【数据结构与算法】第十一章:二叉树深入浅出