【无标题】

二叉树核心概念极简总结(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;
    }
}
相关推荐
进化中的刀盾兽1 小时前
从零实现 C++ Json-Rpc(十):把消息交给真实连接——MuduoConnection 与 ConnectionFactory
c++·rpc
青瓦梦滋8 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
CodeYp201913 小时前
第15讲:二叉搜索树
开发语言·c++·二叉搜索树
shehuiyuelaiyuehao13 小时前
算法56,重排链表
数据结构·算法·链表
pipixia2003314 小时前
C++继承面试四连问:内存叠加、私有继承、sizeof、权限重映射
c++·面试·嵌入式·继承·面向对象·对象模型
suhan15 小时前
【数据结构】七、查找:1.查找的概念、线性结构查找(顺序、折半(二分)、插值、稠密、分块、倒排)
数据结构·算法·排序算法
极客 - L U15 小时前
卡尔曼滤波从零到精通
c语言·数据结构·单片机·嵌入式硬件·mcu
牵猫散步的鱼儿16 小时前
C++ 内存分区
c++
choumin17 小时前
C++ 标准容器为什么不能存引用
c++·容器·引用类型
谙弆悕博士17 小时前
用 C 写了个 Windows 聊天室,踩了几个多线程和控制台的坑
c语言·开发语言·c++·windows·网络编程·聊天室