class Solution {
public TreeNode addOneRow(TreeNode root, int val, int depth) {
if (depth == 1) {
return new TreeNode(val, root, null);
}
Queue<TreeNode> upperFloor = new LinkedList<>();
int layer = 0;
upperFloor.add(root);
while (++layer < depth - 1) {
int queueSize = upperFloor.size();
for (int i = 0; i < queueSize; ++i) {
TreeNode peek = upperFloor.poll();
if (peek.left != null) {
upperFloor.add(peek.left);
}
if (peek.right != null) {
upperFloor.add(peek.right);
}
}
}
for (TreeNode node : upperFloor) {
node.left = new TreeNode(val, node.left, null);
node.right = new TreeNode(val, null, node.right);
}
return root;
}
}
学习笔记:
这是一道二叉树的题目,也是可以使用深度优先搜索和宽度优先搜索。
深度优先搜索写得代码会特别巧妙,解题的方法自己递归调用自己。
宽度优先搜索也比较符合直觉,把要插入的楼上一层找出来后插入一层。