【无标题】

二叉树核心概念极简总结(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;
    }
}
相关推荐
程序喵大人7 小时前
【C++入门】编译链接模型 - 01 一个 C++ 程序是怎样变成可执行文件的
开发语言·c++·编译链接模型
by209998 小时前
vector 的模拟实现:扩容与边界的详细阐述(下)
c++·经验分享·vector·动态数组
余额瞒着我当琳11 小时前
红黑树的实现--红黑树的概念、规则、效率、结构、旋转、查找、验证
数据结构·c++·算法
程序员南飞11 小时前
win系统安装minio
java·数据结构·算法
青少儿编程课堂11 小时前
AC自动机多模式串匹配精讲:校园关键词巡检实战解析
c++·python·算法·bfs·信息学竞赛
longlongzihan12 小时前
LeetCode 5. 最长回文子串:从暴力匹配到中心扩展的思维演进
c++·算法·leetcode
多弗朗皮卡丘12 小时前
C++继承
c++·继承
汉克老师13 小时前
GESP2026年9月认证C++七级( 第三部分编程题(2、括号序列))精讲
c++·gesp·小学生·学c++编程
w_zero_one13 小时前
链表(4)
java·数据结构·算法
白山编程大哥14 小时前
C语言篇:语法进阶
c语言·数据结构·算法