LeetCode-114-二叉树展开为链表

题目

给你二叉树的根结点 root ,请你将它展开为一个单链表:

  • 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null
  • 展开后的单链表应该与二叉树 先序遍历 顺序相同。

示例 1:

img
1
2
输入:root = [1,2,5,3,4,null,6]
输出:[1,null,2,null,3,null,4,null,5,null,6]

示例 2:

1
2
输入:root = []
输出:[]

示例 3:

1
2
输入:root = [0]
输出:[0]

提示:

  • 树中结点数在范围 [0, 2000]
  • -100 <= Node.val <= 100

进阶:你可以使用原地算法(O(1) 额外空间)展开这棵树吗?

题解

我的思路先DFS,然后把每个节点保存到一个队列里,然后再把那个队列依次连在一块,可是形参改变不了实参,寄。

这里代码的方法是:

  • 先把根节点的左子树变成链表
  • 然后把根节点的右子树变成链表
  • 最后把变成链表的右子树放在变成链表的左子树的最右边

这里函数的作用就是把一个二叉树展开为链表。

参考:

114. 二叉树展开为链表 - 力扣(LeetCode)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public void flatten(TreeNode root) {
if(root == null){
return ;
}
//将根节点的左子树变成链表
flatten(root.left);
//将根节点的右子树变成链表
flatten(root.right);
TreeNode temp = root.right;
//把树的右边换成左边的链表
root.right = root.left;
//记得要将左边置空
root.left = null;
//找到树的最右边的节点
while(root.right != null) root = root.right;
//把右边的链表接到刚才树的最右边的节点
root.right = temp;
}
}

LeetCode-114-二叉树展开为链表
https://excelius.xyz/leetcode-114-二叉树展开为链表/
作者
Excelius
发布于
2024年7月28日
许可协议