Keshawn_lu's Blog

Leetcode 623. 在二叉树中增加一行

字数统计: 575阅读时长: 2 min
2022/08/05 Share

题目简介:

给定一个二叉树的根 root 和两个整数 valdepth ,在给定的深度 depth 处添加一个值为 val 的节点行。

注意,根节点 root 位于深度 1

加法规则如下:

  • 给定整数 depth,对于深度为 depth - 1 的每个非空树节点 cur ,创建两个值为 val 的树节点作为 cur 的左子树根和右子树根。
  • cur 原来的左子树应该是新的左子树根的左子树。
  • cur 原来的右子树应该是新的右子树根的右子树。
  • 如果 depth == 1意味着 depth - 1 根本没有深度,那么创建一个树节点,值 val作为整个原始树的新根,而原始树就是新根的左子树。

示例 1:

addrow-tree

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

示例 2:

add2-tree

1
2
输入: root = [4,2,null,3,1], val = 1, depth = 3
输出: [4,2,null,1,1,3,null,null,1]

提示:

  • 节点数在 [1, 10^4] 范围内
  • 树的深度在 [1, 10^4]范围内
  • -100 <= Node.val <= 100
  • -105 <= val <= 105
  • 1 <= depth <= the depth of tree + 1

思路:

使用广度优先遍历,首先找到depth - 1层的结点,然后在这层结点的基础上增加结点,并将原depth - 1层的左右子结点分配给新增加的结点即可。

tip:

  • depth = 1时,创建一个结点,并作为原二叉树的root结点即可。(参考加法规则最后一条)

代码如下:

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
36
37
38
39
40
41
42
43
44
45
46
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* addOneRow(TreeNode* root, int val, int depth) {

if(depth == 1)
return new TreeNode(val, root, nullptr);

vector<TreeNode*> Lastlayer(1, root); //初始化, 将root压入

for(int i = 1; i < depth - 1; i++){ //找到depth - 1层的结点

vector<TreeNode*> temp;
for(auto node : Lastlayer){ //访问第i层的结点

if(node -> left)
temp.push_back(node -> left);

if(node -> right)
temp.push_back(node -> right);
}

Lastlayer = temp; //更新为下一层的结点
}

//添加结点
for(auto node : Lastlayer){

node -> left = new TreeNode(val, node -> left, nullptr);
node -> right = new TreeNode(val, nullptr, node -> right);
}

return root;

}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: