《二叉树魔法学院》
—— 二叉树与遍历的魔法秘密
1、🌟故事开始:
(1)在“图与树王国”的深处,
有一座神秘学院:
🏰 二叉树魔法学院
(2)传说:
学会“二叉树遍历魔法”的同学,
可能解锁新的魔法技能!
(3)汉克老师说:
“普通树的孩子不受限制。”
“而二叉树,每个节点最多只有两个孩子。”
于是,
今天同门们的冒险又开始了!
第一章:什么是二叉树?
🌳 一、普通树
1、先看看普通树:
1 / | \ 2 3 42、节点1有:
2
3
4
三个孩子。
🌳 二、二叉树
1、二叉树规定:
每个节点最多只能有两个孩子!
2、而且必须区分:
左孩子 右孩子3、🌟例子
A / \ B C这里:
B 是左孩子
C 是右孩子
4、🌟再看复杂一点
A / \ B C / \ \ D E F5、🌟观察
A有:
左孩子 B
右孩子 C
B有:
左孩子 D
右孩子 E
C有:
没有左孩子
右孩子 F
6、🌟重点!
二叉树:
最多两个孩子。
不是必须两个!
第二章:为什么二叉树这么重要?
1、例如:🌟表达式计算
+ / \ 3 5表示:
3 + 5是不是很清晰呢!
2、🌟结论
二叉树:
是算法世界重要的结构之一!
第三章:二叉树的重要概念
1、🌟根节点(Root)
A / \ B C / \ \ D E F最上面的节点。
A2、🌟叶子节点(Leaf)
没有孩子的节点。
例如:
D E F3、🌟父节点(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 CA会记住:
left -> B right -> C(5)🌟像什么?
像藏宝图!
每个节点都知道:
“往左去哪”
“往右去哪”
第五章:二叉树遍历 —— 魔法学院核心!
1、汉克老师说有了节点:
“我们还要学会如何遍历,才行”
2、所谓:
🌟遍历
3、就是:
把树里的所有节点访问一遍。
4、🌟重点中的重点
今天同学们要掌握:
⚔️前序遍历
⚔️中序遍历
⚔️后序遍历
5、🌟记住!
它们的区别是:
“什么时候访问自己”
第六章:前序遍历(Preorder)
1、🌟口诀
先自己 再左边 最后右边简称:
根 → 左 → 右2、🌟例子
A / \ B C / \ \ D E F3、🌟开始遍历!
(1)第一步
先访问:
A因为:
先自己。
(2)第二步
进入左边:
B(3)第三步
继续左边:
D(4)第四步
D没孩子。
退回B。
去右边:
E(5)第五步
退回A。
去右边:
C(6)第六步
去F。
(7)🌟最终顺序
A B D E C F4、🌟前序遍历代码
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 F3、🌟遍历过程
(1)先一路向左
到:
D(2)D没左边
打印:
D(3)回到B
打印:
B(4)去E
打印:
E(5)回到A
打印:
A(6)去右边C
最后F。
(7)🌟最终顺序
D B E A C F4、🌟中序遍历代码
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 A4、🌟后序代码
void postorder(Node *root) { if(root == NULL) return; postorder(root->left); postorder(root->right); cout << root->val << " "; }5、🌟口诀
孩子先做完, 自己最后出场。第九章:递归的作用
1、🌟小猴子探险
A ├──B │ ├──D │ └──E └──C2、小猴子规则:
(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
🌟 神奇的查找魔法!