【二叉树】理论基础篇1

前言

本文带你走进二叉树,二叉树是我们学习中一个非常重要的内容,同时二叉树的内容篇幅也会比较长,所以这里分开向大家介绍。本文首先向大家介绍二叉树的理论知识,后续将会向大家讲解具体的题目。本文用于记录自己的学习过程,同时向大家进行分享相关的内容。本文内容参考于代码随想录同时包含了自己的许多学习思考过程,如果有错误的地方欢迎批评指正!

什么是二叉树

说到二叉树,我们首先应该知道树。树就是由根节点和其子节点构成的数据结构的形式。如图左边的就是树,其可以由多个子节点,因其形状像树,所以命名为树。其实二叉树就是树的一种特殊形式,如右图所示,二叉树每个节点最多只有两个子节点。所以我们通常叫其子节点为左右子节点。

image-20250413143731644

二叉树的种类

满二叉树

首先了解概念,当一个二叉树其只有度为0或者度为2的子节点,并且其度为零的子节点全部在同一层的时候,那么其就是满二叉树。什么是度,就是该节点的子节点的个数称为度。当满二叉树的深度为k时,其子节点的个数为 2 k − 1 2^k-1 2k1。如图所示:

image-20250413192236273

完全二叉树

首先看概念:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层(h从1开始),则该层包含 1~ 2^(h-1)个节点。一定要理解就是是按顺序一个个的,只有最后一层可能没填满。

image-20250413192458092

二叉搜索树

刚才说的都是节点没有数值的,而二叉搜索树就跟数值相关的。记住三点就是:

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉排序树

image-20250413192645746

平衡二叉搜索树

平衡二叉搜索树又被称之为AVL树。其定义如下:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。就是其是为了搜索的简便性,避免某个极端的情况所有节点只有左子树或者右子树,会给搜索带来复杂。

image-20250413192903420

二叉树的存储方式

链式存储

其实为了简便性,我们一般使用二叉树时都是使用链表进行存储的,即链式存储。与链表的区别就是其有两个指针域,一个指向左子树,一个指向右子树。同时有个数据域表示具体的值。其形式如下:

image-20250413193115481

数组存储

当然我们也是可以使用数组进行存储的,即顺序存储。如何存储呢?就是当其父节点为i时,其左孩子为2i,其右节点为2i+1,如果没有左节点右节点怎么办,其空着就行了代表没有左孩子或者右孩子。其存储方式会比较浪费内存的,所有我们很少使用顺序存储。

image-20250413193406253

二叉树的遍历方式

二叉树的遍历方式总的来说就是只有两种,其细分有前中后序遍历以及层次遍历。

  • 深度优先遍历
    • 前序遍历(递归法,迭代法)
    • 中序遍历(递归法,迭代法)
    • 后序遍历(递归法,迭代法)
  • 广度优先遍历
    • 层次遍历(迭代法)

前中后序到底什么意思呢?其实就是根节点的位置。比如说前序遍历,就是中左右,先根节点在左节点右节点。中序遍历就是,先左节点再根节点右节点。后序遍历就是先左右节点最后根节点。

image-20250413194154080

二叉树的定义(代码)

class TreeNode:
    def __init__(self, val, left = None, right = None):
        self.val = val
        self.left = left
        self.right = right

算法基础系列

一文了解什么是数组及其经典考察题目
走进链表及其经典考察题目
还不知道什么是哈希表,看这篇文章就够了
字符串匹配究极大招【KMP】:带你一步步从原理到构建
【栈与队列】:基础实战篇-优快云博客
【双指针法】:这么常用的你怎么能不知道-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值