114. 二叉树展开为链表
- 题号:114
- 来源:LeetCode
- 难度:中等
- 标签:
树DFS链表 - 语言:TypeScript
- 解法:2 个
- 作者:lmliheng
- 最近更新:2026-09-27
解法一
TypeScript · O(n) 时间 · O(n) 空间 · 更新于 2026-09-27
先序收集节点值,再串成右链的新树
typescript
/**
* @difficulty medium
* @tags 树,DFS,链表
* @time O(n)
* @space O(n)
* @note 先序收集节点值,再串成右链的新树
* @114. 二叉树展开为链表
*/
class TreeNode {
val: number;
left: TreeNode | null;
right: TreeNode | null;
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
this.val = (val === undefined ? 0 : val)
this.left = (left === undefined ? null : left)
this.right = (right === undefined ? null : right)
}
}
let root: TreeNode | null = new TreeNode(1, new TreeNode(2, new TreeNode(3, null, null), new TreeNode(4, null, null)), new TreeNode(5, null, new TreeNode(6, null, null)))
if (root === null) {
console.log(null)
} else {
let arr: number[] = []
const bfs = (root: TreeNode | null): void => {
if (root === null) {
return
}
arr.push(root.val)
if (root.left) {
bfs(root.left)
}
if (root.right) {
bfs(root.right)
}
}
bfs(root)
root = new TreeNode(arr[0])
let n: number = 0
const CreateTree = (root: TreeNode): void => {
if (n >= arr.length - 1) {
return
}
root.right = new TreeNode(arr[n+1])
n++
CreateTree(root.right)
}
CreateTree(root)
console.log(arr)
console.log(root)
}
export {};源码:ts/leetcode/114. 二叉树展开为链表.ts
解法二 · TypeScript
TypeScript · O(n) 时间 · O(n) 空间 · 更新于 2026-09-27
先序收集节点引用,原地重连 left/right
typescript
/**
* @difficulty medium
* @tags 树,DFS,链表
* @time O(n)
* @space O(n)
* @note 先序收集节点引用,原地重连 left/right
* @114. 二叉树展开为链表(解法二)
*/
class TreeNode {
val: number;
left: TreeNode | null;
right: TreeNode | null;
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
this.val = (val === undefined ? 0 : val)
this.left = (left === undefined ? null : left)
this.right = (right === undefined ? null : right)
}
}
// 收集节点
let root: TreeNode | null = new TreeNode(1, new TreeNode(2, new TreeNode(3, null, null), new TreeNode(4, null, null)), new TreeNode(5, null, new TreeNode(6, null, null)))
if (root === null) {
console.log(null)
} else {
let arr: TreeNode[] = []
const bfs = (root: TreeNode | null): void => {
if (root === null) {
return
}
arr.push(root)
if (root.left) {
bfs(root.left)
}
if (root.right) {
bfs(root.right)
}
}
bfs(root)
// 重新连接节点
for (let i = 0; i < arr.length - 1; i++) {
arr[i].left = null;
arr[i].right = arr[i + 1];
}
// 最后一个节点的左右子树设为null
if (arr.length > 0) {
arr[arr.length - 1].left = null;
arr[arr.length - 1].right = null;
}
console.log(root)
}
export {};源码:ts/leetcode/114. 二叉树展开为链表(解法二).ts
在 GitHub 上查看题目所在目录:lmliheng/algorithm