二叉树核心概念极简总结(GESP/CSP 必背)
1. 基础概念
① 结点
二叉树里的每一个元素都叫结点,比如根、叶子都是结点。
② 根结点
二叉树最顶层、没有父结点 的那个结点,一棵树只有1 个根结点。
③ 子结点(孩子结点)
一个结点往下延伸出来的结点,分左孩子、右孩子;二叉树每个结点最多 2 个子结点。
④ 度
一个结点拥有的子结点个数:
- 度 0:没有孩子 → 叶子结点
- 度 1:只有 1 个孩子
- 度 2:有左、右 2 个孩子
2. 满二叉树
每一层结点都全部填满,没有空缺。
- 高度为 h(根高度 = 1),总结点数:2h−1
- 特点:所有叶子都在最底层;每个非叶子结点度都是 2。
3. 完全二叉树
- 前 h−1 层是满二叉树;
- 最后一层结点从左往右依次排,不能有空缺,如果只有一个子树,必须是左子树。
-
满二叉树是特殊的完全二叉树
-
秒杀公式(求叶子):
- 结点数 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;
}
}