【无标题】

二叉树核心概念极简总结(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;
    }
}
相关推荐
爱和冰阔落13 分钟前
【Linux】Ctrl+C 到底做了什么?从键盘、kill 到 alarm,一次讲清信号的产生
linux·运维·c++·安卓
水饺编程30 分钟前
第5章,[Win32 章节] :贝塞尔样条曲线(一)
c语言·c++·windows·visual studio
疯狂打码的少年1 小时前
【数据结构】交换类排序:冒泡与快速排序
数据结构·笔记·算法·排序算法
Nil2081 小时前
leetcode 108有序数组转换为二叉搜索树
数据结构·算法·leetcode
程序员打怪兽1 小时前
C++:类与对象,封装,继承,多态,构造/析构,重载/重写
c++
hn小菜鸡1 小时前
LeetCode 763、划分字母区间
数据结构·算法·leetcode
Escalating_xu2 小时前
【C++ STL简介】从六大组件到容器、迭代器与算法协作
java·c++·算法
Brilliantwxx2 小时前
【Linux】 进程(3)深度解析:从查看进程到进程状态
linux·服务器·网络·c++
啊啊啊啊啊!!!!2 小时前
【c++】二叉搜索树
开发语言·c++
ShineWinsu2 小时前
对于 C++:C++20中Concept(概念) 与 Coroutine(协程)的解析
linux·开发语言·网络·c++·c++20·epoll