实现二叉树所有路径
使用深度优先遍历获取二叉树从根节点到叶子节点的所有路径
问题
实现 treePath 方法,返回二叉树从根节点到所有叶子节点的路径,路径格式为 "1->2->5"。
const tree: Tree = {
value: 1,
left: {
value: 2,
right: { value: 5 }
},
right: { value: 3 }
};
treePath(tree); // [ '1->2->5', '1->3' ]
解答
使用深度优先遍历(DFS),递归遍历每个节点,记录路径,到达叶子节点时保存完整路径。
type Tree = {
value: number;
left?: Tree;
right?: Tree;
};
function treePath(root: Tree): string[] {
const result: string[] = [];
function dfs(node: Tree, path: string) {
// 构建当前路径
const currentPath = path ? `${path}->${node.value}` : `${node.value}`;
// 叶子节点:没有左右子树
if (!node.left && !node.right) {
result.push(currentPath);
return;
}
// 递归遍历左子树
if (node.left) {
dfs(node.left, currentPath);
}
// 递归遍历右子树
if (node.right) {
dfs(node.right, currentPath);
}
}
dfs(root, '');
return result;
}
关键点
- 使用递归实现深度优先遍历
- 判断叶子节点的条件是左右子树都不存在
- 路径字符串在递归过程中逐步拼接
- 只在到达叶子节点时才将路径加入结果数组
目录