1666. 改变二叉树的根节点 🔒
题目描述
给定一棵二叉树的根节点 root
和一个叶节点 leaf
,更改二叉树,使得 leaf
为新的根节点。
你可以按照下列步骤修改从 leaf
到 root
的路径中除 root
外的每个节点 cur
:
- 如果
cur
有左子节点,则该子节点变为cur
的右子节点。注意我们保证cur
至多有一个子节点。 cur
的原父节点变为cur
的左子节点。
返回修改后新树的根节点。
注意:确保你的答案在操作后正确地设定了 Node.parent
(父节点)指针,否则会被判为错误答案。
示例 1:
输入: root = [3,5,1,6,2,0,8,null,null,7,4], leaf = 7 输出: [7,2,null,5,4,3,6,null,null,null,1,null,null,0,8]
示例 2:
输入: root = [3,5,1,6,2,0,8,null,null,7,4], leaf = 0 输出: [0,1,null,3,8,5,null,null,null,6,2,null,null,7,4]
提示:
- 树中节点的个数在范围
[2, 100]
内。 -109 <= Node.val <= 109
- 所有的
Node.val
都是唯一的。 leaf
存在于树中。
解法
方法一:自底向上模拟
从叶节点 leaf
开始,向上模拟翻转操作。
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为二叉树节点个数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|