【无标题】

二叉树核心概念极简总结(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;
    }
}
相关推荐
Darling噜啦啦4 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
clint4564 天前
C++进阶(1)——前景提要
c++
夜悊4 天前
C++代码示例:进制数简单生成工具
c++
郝学胜_神的一滴4 天前
CMake 021: IF 条件判据详诠
c++·cmake
_wyt0015 天前
洛谷 B3930 [GESP202312 五级] 烹饪问题 题解
c++·gesp
小小工匠5 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾5 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
один but you5 天前
constexpr函数
c++
Qres8215 天前
算法复键——树状数组
数据结构·算法
凡人叶枫5 天前
Effective C++ 条款41:了解隐式接口和编译期多态
java·开发语言·c++·effective c++