从 ESLint/Prettier 到 Java:代码格式化与检查工具的全面对标实战
2026/4/24 1:20:23
树和森林的遍历及其与二叉树的转换是数据结构中的重要内容,理解其原理有助于将多叉树问题转化为更易处理的二叉树结构。
1. 树的遍历:
2. 森林的遍历:
3. 树/森林 与 二叉树 的转换:
使用“孩子兄弟表示法”(Left Child - Right Sibling Representation)实现转换:
意义与应用:
通过这种转换,可以将对树或森林的操作统一为对二叉树的操作,从而复用成熟的二叉树算法(如遍历、查找、插入、删除等),简化程序设计与实现。
# 孩子兄弟表示法的节点定义示例classTreeNode:def__init__(self,val=0):self.val=val self.first_child=None# 左孩子:第一个孩子self.next_sibling=None# 右兄弟:下一个兄弟通过孩子兄弟表示法(也称左孩子-右兄弟表示法)可以将一棵普通的树转换为唯一的二叉树。其核心思想是:
每个节点的“第一个孩子”作为其左子树,“下一个兄弟”作为其右子树。
假设有一棵树如下:
A / | \ B C D / \ | E F G / H使用两个指针:
first_child→ 左子树next_sibling→ 右子树转换过程:
A 的 first_child = B,next_sibling = null B 的 first_child = E,next_sibling = C C 的 first_child = null,next_sibling = D D 的 first_child = G,next_sibling = null E 的 first_child = null,next_sibling = F F 的 first_child = H,next_sibling = null G/H 的 first_child = null,next_sibling = null根据上述规则构造二叉树:
A / B / \ E C \ \ F D / H \ G注意:这里有个关键点!在原树中,G 是 D 的孩子,所以在二叉树中 G 应该是 D 的 left;而 H 是 F 的孩子 → H 是 F 的 left。
正确重构后的对应二叉树应为:
A / B / \ E C \ \ F D / / H G✔️ 解释:
| 原树中的关系 | 在二叉树中的表示 |
|---|---|
| 节点的第一个孩子 | → 该节点的左子树 |
| 节点的下一个兄弟 | → 该节点的右子树 |
| 其他孩子 | 通过兄弟链间接连接 |
# Python 节点定义示例classTreeToBinaryNode:def__init__(self,val):self.val=val self.left=None# 第一个孩子self.right=None# 下一个兄弟