【无标题】

二叉树核心概念极简总结(GESP/CSP 必背)

1. 基础概念

① 结点

二叉树里的每一个元素都叫结点,比如根、叶子都是结点。

② 根结点

二叉树最顶层、没有父结点 的那个结点,一棵树只有1 个根结点

③ 子结点(孩子结点)

一个结点往下延伸出来的结点,分左孩子、右孩子;二叉树每个结点最多 2 个子结点。

④ 度

一个结点拥有的子结点个数

  • 度 0:没有孩子 → 叶子结点
  • 度 1:只有 1 个孩子
  • 度 2:有左、右 2 个孩子

2. 满二叉树

每一层结点都全部填满,没有空缺。

  • 高度为 h(根高度 = 1),总结点数:2h−1
  • 特点:所有叶子都在最底层;每个非叶子结点度都是 2。

3. 完全二叉树

  1. 前 h−1 层是满二叉树
  2. 最后一层结点从左往右依次排,不能有空缺,如果只有一个子树,必须是左子树
  • 满二叉树是特殊的完全二叉树

  • 秒杀公式(求叶子):

    • 结点数 n 奇数:叶子 =(n+1)÷2
    • 结点数 n 偶数:叶子 =n÷2

4. 一句话区分

  • 满二叉树:每层塞满,一个不多一个不少
  • 完全二叉树:前面全满,最后一层靠左排

5.递归遍历二叉树

1、创建结构体
C++ 复制代码
struct node {
    char data;//根结点
    int left,right;//左右结点
} BTree[10];
2、循环遍历(前序:根左右)
C++ 复制代码
void preOrder(int root) {
    if(root>=0) {
        cout<<BTree[root].data;
        preOrder(BTree[root].left);
        preOrder(BTree[root].right);
    }
}
3、循环遍历(中序:左根右)
C++ 复制代码
void inOrder(int root) {
    if(root>=0) {
        inOrder(BTree[root].left);
        cout<<BTree[root].data;
        inOrder(BTree[root].right);
    }
}
4、循环遍历(后序:左右根)
C++ 复制代码
void postOrder(int root) {
    if(root>=0) {
        postOrder(BTree[root].left);
        postOrder(BTree[root].right);
        cout<<BTree[root].data;
    }
}
相关推荐
stolentime1 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法
tdtsmt2 小时前
穿戴硬件量产工艺实录:天地通电子智能手表主板 SMT 贴片案
c++
Msshu1233 小时前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
m0_734571766 小时前
深入理解C++ 析构函数<一>基本概念
开发语言·c++
动词ing6 小时前
【学习笔记】数据结构栈与队列(栈先进后出+队列先进先出+括号匹配+消消乐模型)
数据结构·笔记·学习
t-think7 小时前
C++ string 类(上)—— string类初识与常用接口详解
开发语言·c++
a187927218317 小时前
【算法】链表(二):链表上的双指针——变速、异链与定距,和一份路程账本
数据结构·算法·leetcode·链表·go·指针·环形链表
cpp_learners7 小时前
C++ 实现责任链模式(Chain of Responsibility):从一堆 if-else 到可插拔的处理管道
开发语言·c++·责任链模式
郝学胜_神的一滴7 小时前
C++11 工程级应用 12:编译期类型魔法,干掉重复与臃肿的代码
c++·visual studio
zcmodeltech8 小时前
火电厂模型能演示冷态启动和故障处理吗?——基于STM32与Modbus RTU的集控实训控制系统设计
数据结构·stm32·单片机·嵌入式硬件·能源