一、树与二叉树:自然界的数字映射
想象你正站在一片古老森林中,每棵树(数据结构中的"树")都从一根树干(根节点)向上生长,分出枝桠(子节点),再衍生出无数叶片(数据)。而二叉树是最守规矩的植物——每个枝桠最多分出两个新枝(左/右子节点),就像精心修剪过的盆景,既有序又充满可能性。
核心概念三重奏:
- 层次:根节点是第1层,它的子节点是第2层,如同家族的世世代代
- 高度:从根部到最高叶片的垂直距离,就像摩天楼的层数
- 度:每个节点的"生育能力",二叉树节点最多生两个"孩子"
二、遍历方式:四位性格迥异的探险家
1. 前序遍历(根左右)——急性子探险家
性格标签:#立即行动 #结果导向
行动模式:
var preorderTraversal = (root) => {
let result = [];
const traverse = (node) => {
if (node) {
result.push(node.val); // 立刻标记当前位置
traverse(node.left); // 冲向左边丛林
traverse(node.right); // 转向右边峡谷
}
};
traverse(root);
return result;
};
生活化场景:
就像你走进迷宫,先在入口处涂鸦标记(处理根节点),然后直奔左边的走廊(左子树),探索完毕再折返右边通道(右子树)。这种模式适合需要先获取核心信息的场景,比如复制树结构或计算表达式值。
2. 中序遍历(左根右)——强迫症患者
性格标签:#按部就班 #完美主义
行动模式:
var inorderTraversal = function(root) {
let result = [];
const traverse = (node) => {
if (node) {
traverse(node.left); // 先把左边整理得井井有条
result.push(node.val); // 回到中间处理核心事务
traverse(node.right); // 最后收拾右边残局
}
};
traverse(root);
return result;
};
生活化场景:
想象你在整理书房,先彻底收拾左边的书架(左子树),然后把中间书桌擦得一尘不染(处理根节点),最后整理右边的文件柜(右子树)。这种模式在二叉搜索树中会输出完美升序序列,就像自动整理好的书架。
3. 后序遍历(左右根)——完美主义者
性格标签:#善后专家 #延迟满足
行动模式:
var postorderTraversal = function(root) {
let result = [];
const traverse = (node) => {
if (node) {
traverse(node.left); // 先帮左邻居打扫
traverse(node.right); // 再帮右邻居收拾
result.push(node.val); // 最后处理自己的事务
}
};
traverse(root);
return result;
};
生活化场景:
就像聚会结束时,你先帮左边朋友收拾餐具(左子树),再协助右边朋友穿外套(右子树),最后才拿起自己的物品离开(处理根节点)。这种模式适合需要先确保子系统安全再处理主系统的场景,比如释放内存或计算子树大小。
4. 层序遍历(广度优先)——社交达人
性格标签:#雨露均沾 #社交网络
行动模式:
var levelOrder = function(root) {
const queue = [root];
const res = [];
if (!root) return res;
while (queue.length) {
const levelSize = queue.length;
const currentLevel = [];
for (let i = 0; i < levelSize; i++) {
const node = queue.shift(); // 邀请队列首位入场
currentLevel.push(node.val);
if (node.left) queue.push(node.left); // 推荐新朋友加入
if (node.right) queue.push(node.right);
}
res.push(currentLevel); // 记录本层社交成果
}
return res;
};
生活化场景:
就像举办一场派对,先邀请第1层的朋友(根节点),然后依次介绍他们的左邻右舍(左/右子节点)加入下一轮派对。每轮结束后拍照记录(保存层级结果),最终得到完整的社交网络图谱。这种模式适合需要计算层级均值或寻找最短路径的场景。
三、遍历背后的哲学
二叉树遍历就像人生选择:
- 前序遍历教会我们把握当下,先处理核心问题再解决周边
- 中序遍历提醒我们循序渐进,按自然顺序处理事务
- 后序遍历诠释责任担当,先确保他人安全再顾自己
- 层序遍历展现格局视野,从中心向外围逐步扩展影响力
下次当你面对二叉树时,不妨想象自己是个数字探险家,在代码的森林中寻找思维宝藏。