第六章 二叉树理论基础

本文详细介绍了二叉树的理论基础,包括满二叉树、完全二叉树、二叉搜索树和平衡二叉搜索树的概念。此外,讨论了二叉树的链式与顺序存储方式以及深度优先和广度优先遍历方法。二叉树在C++中的应用,如map和set的底层实现,以及在解决各类问题中如构造、搜索和删除操作的角色也被提及。
摘要由CSDN通过智能技术生成

第六章 二叉树理论基础

一、二叉树分类

二叉树的分类为:

  • 满二叉树

如果一棵二叉树只有度为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){}
};

五、题型总结

对二叉树的遍历顺序进行分类:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeLinghu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值