普通树就像个大家族,一个老父亲可以生七八个儿子。但计算机嫌这种结构太乱了(有的节点有 1 个子树,有的有 5 个,不好写代码)。为了方便管理,计算机强行规定了一种“二叉树传位法”:
- 规则一(左边连的必须是长子):老父亲从此以后只认自己的大儿子(大儿子变成左孩子),其他的二儿子、三儿子他都不管了,统统断绝父子关系!
- 规则二(右边连的必须是亲兄弟):那些被老父亲抛弃的弟弟们怎么办?靠大哥来养!大哥的右手拉着二弟,二弟的右手拉着三弟(亲兄弟变成右孩子)。
这就是“左孩子,右兄弟”**!只要按照这个规矩走,再复杂的家族也能变成单线汇报的二叉树。
🌰 举个通俗易懂的例子
假设我们有一棵最简单的“普通树”,家族架构如下:
- 爷爷 A 有三个儿子:老大 B、老二 C、老三 D。
- 老大 B 有两个儿子:孙子 E、孙子 F。
- 老二 C 和老三 D 还没有孩子。
普通树画出来是这样的:
A (爷爷)
/ | \
B C D (三个儿子)
/ \
E F (老大B的两个儿子)
现在,我们用“单线传位规矩(左孩子,右兄弟)”给它做手术:
第一步:兄弟们手拉手(连兄弟) 把所有的亲兄弟用一根横线连起来:B 连着 C,C 连着 D;E 连着 F。
第二步:老父亲六亲不认,只留长子(断父子) 爷爷 A 只保留连着长子 B 的线,把连着 C 和 D 的线统统剪断! 老大 B 只保留连着长子 E 的线,把连着 F 的线剪断!
第三步:整理队形,向右倾斜 45 度! 现在我们来看看每个人的“左孩子(长子)”和“右孩子(亲兄弟)”分别是谁,这棵二叉树就画出来了:
- 看 A: A 的长子是 B(A 的左孩子是 B),A 自己没有兄弟(A 的右边为空)。
- 看 B: B 的长子是 E(B 的左孩子是 E),B 的亲弟弟是 C(B 的右孩子是 C)。
- 看 C: C 没有孩子(C 的左边为空),C 的亲弟弟是 D(C 的右孩子是 D)。
- 看 D: D 没有孩子,也没有亲弟弟(D 的左右都为空)。
- 看 E: E 没有孩子(E 的左边为空),E 的亲弟弟是 F(E 的右孩子是 F)。
画成纯正的二叉树就是这样:
A
/
B
/ \
E C
\ \
F D
核心总结
你看转化后的二叉树:
- 任何一个节点,它往左走,遇到的一定是它原来的亲生大儿子。
- 任何一个节点,它往右走,遇到的一定是它原来的亲生二弟、三弟。
