GESP6级C++考试语法知识(二、图与树(二))
2026/5/10 11:06:57 网站建设 项目流程


《二叉树魔法学院》

—— 二叉树与遍历的魔法秘密


1、🌟故事开始:

(1)在“图与树王国”的深处,

有一座神秘学院:

🏰 二叉树魔法学院


(2)传说:

学会“二叉树遍历魔法”的同学,
可能解锁新的魔法技能!


(3)汉克老师说:

“普通树的孩子不受限制。”

“而二叉树,每个节点最多只有两个孩子。”

于是,
今天同门们的冒险又开始了!


第一章:什么是二叉树?


🌳 一、普通树

1、先看看普通树:

1 / | \ 2 3 4

2、节点1有:

  • 2

  • 3

  • 4

三个孩子。


🌳 二、二叉树

1、二叉树规定:

每个节点最多只能有两个孩子!


2、而且必须区分:

左孩子 右孩子

3、🌟例子

A / \ B C

这里:

  • B 是左孩子

  • C 是右孩子


4、🌟再看复杂一点

A / \ B C / \ \ D E F

5、🌟观察

A有:

  • 左孩子 B

  • 右孩子 C

B有:

  • 左孩子 D

  • 右孩子 E

C有:

  • 没有左孩子

  • 右孩子 F


6、🌟重点!

二叉树:

最多两个孩子。

不是必须两个!


第二章:为什么二叉树这么重要?


1、例如:🌟表达式计算

+ / \ 3 5

表示:

3 + 5

是不是很清晰呢!


2、🌟结论

二叉树:

是算法世界重要的结构之一!


第三章:二叉树的重要概念


1、🌟根节点(Root)

A / \ B C / \ \ D E F

最上面的节点。

A

2、🌟叶子节点(Leaf)

没有孩子的节点。

例如:

D E F

3、🌟父节点(Parent)

你的上面,

谁连着你,

谁是爸爸节点。


4、🌟兄弟节点

例如:

B 和 C 父节点都是 A

是兄弟节点。


5、🌟深度

节点在第几层。


6、🌟课堂小游戏

A / \ B C / \ \ D E F

🌟问题1

谁是叶子?

答案:

D E F

🌟问题2

谁是C的爸爸节点?

答案:

A

🌟问题3

B和谁是兄弟节点?

答案:

C

第四章:二叉树如何存进电脑?


1、汉克老师说:

“电脑看不懂树。”

“所以我们要用结构体的方法,让电脑记住它!”


2、🌟方法:节点结构

struct Node { char val; Node *left; Node *right; };

3、🌟详细说明


(1)val

存自己的名字。


(2)left

记住左孩子。


(3)right

记住右孩子。


(4)🌟举例

A / \ B C

A会记住:

left -> B right -> C

(5)🌟像什么?

像藏宝图!

每个节点都知道:

“往左去哪”

“往右去哪”


第五章:二叉树遍历 —— 魔法学院核心!


1、汉克老师说有了节点:

“我们还要学会如何遍历,才行”


2、所谓:

🌟遍历


3、就是:

把树里的所有节点访问一遍。


4、🌟重点中的重点

今天同学们要掌握:


⚔️前序遍历

⚔️中序遍历

⚔️后序遍历


5、🌟记住!

它们的区别是:

“什么时候访问自己”


第六章:前序遍历(Preorder)


1、🌟口诀

先自己 再左边 最后右边

简称:

根 → 左 → 右

2、🌟例子

A / \ B C / \ \ D E F

3、🌟开始遍历!


(1)第一步

先访问:

A

因为:

先自己。


(2)第二步

进入左边:

B

(3)第三步

继续左边:

D

(4)第四步

D没孩子。

退回B。

去右边:

E

(5)第五步

退回A。

去右边:

C

(6)第六步

去F。


(7)🌟最终顺序

A B D E C F

4、🌟前序遍历代码

void preorder(Node *root) { if(root == NULL) return; cout << root->val << " "; preorder(root->left); preorder(root->right); }

5、🌟详细解释


(1)第一行

if(root == NULL)

如果没节点了:

就结束。


(2)第二行

cout << root->val;

先打印自己!


(3)第三行

去左边。


(4)第四行

去右边。


6、🌟口诀记忆

先看自己, 再看左边, 最后右边。

第七章:中序遍历(Inorder)


1、🌟口诀

先左边 再自己 最后右边

简称:

左 → 根 → 右

2、🌟还是这棵树

A / \ B C / \ \ D E F

3、🌟遍历过程


(1)先一路向左

到:

D

(2)D没左边

打印:

D

(3)回到B

打印:

B

(4)去E

打印:

E

(5)回到A

打印:

A

(6)去右边C

最后F。


(7)🌟最终顺序

D B E A C F

4、🌟中序遍历代码

void inorder(Node *root) { if(root == NULL) return; inorder(root->left); cout << root->val << " "; inorder(root->right); }

5、🌟发现了吗?

只是:

打印位置变了!


第八章:后序遍历(Postorder)


1、🌟口诀

先左边 再右边 最后自己

简称:

左 → 右 → 根

2、🌟过程

一路往下。

孩子都处理完。

最后才处理自己。


3、🌟最终顺序

D E B F C A

4、🌟后序代码

void postorder(Node *root) { if(root == NULL) return; postorder(root->left); postorder(root->right); cout << root->val << " "; }

5、🌟口诀

孩子先做完, 自己最后出场。

第九章:递归的作用


1、🌟小猴子探险

A ├──B │ ├──D │ └──E └──C

2、小猴子规则:


(1)到一个房间

先干自己的事。


(2)再进入左房间


(3)再进入右房间


(4)没路了

自动退回来。


第十章:课堂训练


🌟训练1:写遍历顺序

A / \ B C / \ D E

🌟前序?

答案:

A B D E C

🌟中序?

答案:

D B E A C

🌟后序?

答案:

D E B C A

🌟训练2:谁是叶子?

答案:

D E C

🌟训练3:画遍历路线

同学们:

✅ 用箭头画
✅ 手指走树
✅ 模拟回退

掌握了画遍历路线的方法,效果会特别好。


第十一章:举一反三!


🌟哪里会用到二叉树?


1、🌳搜索系统


2、🌳AI决策树


3、🌳表达式计算

* / \ + 5 / \ 2 3

表示:

(2+3)*5

等等


第十二章:本课总结


🌟同学们今天学会了什么?


1、二叉树

每个节点最多两个孩子

2、三种遍历


(1)🌟前序

根 左 右

(2)🌟中序

左 根 右

(3)🌟后序

左 右 根

3、🌟递归方法


⚔️课后任务


🌟任务1

画一棵符合定义的“二叉树”。


🌟任务2

写出下面树的:

  • 前序

  • 中序

  • 后序

1 / \ 2 3 / \ 4 5

🌟下节课预告

下一课:

⚔️《二叉树进阶王国》⚔️

我们将学习:

🌟 完全二叉树
🌟 数组存树
🌟 二叉排序树 BST
🌟 神奇的查找魔法!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询