通过万岁!!!
- 题目:给你一个二叉树,然后在他的第depth层上面插入一层。插入的值是val,并且之前的左子树,还是这个插入节点的左子树,之前的右子树还是这个插入节点的右子树。
- 思路:层序遍历,如果到了需要插入的一层(depth的上面一层),然后就new节点,把左子树挂在new的节点的左边,右子树挂在new的节点的右边。这里需要注意,其实我们new的节点。注意,这里其实new了两个节点。
- 技巧:层序遍历
java代码
class Solution {
public TreeNode addOneRow(TreeNode root, int val, int depth) {
if (depth == 1) {
TreeNode treeNode = new TreeNode(val, root, null);
return treeNode;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int size, floor = 1;
while (!queue.isEmpty()) {
size = queue.size();
if (depth - 1 == floor) {
for (int i = 0; i < size; i++) {
TreeNode remove = queue.remove();
remove.left = new TreeNode(val, remove.left, null);
remove.right = new TreeNode(val, null, remove.right);
}
return root;
}
for (int i = 0; i < size; i++) {
TreeNode remove = queue.remove();
if (remove.left != null) {
queue.add(remove.left);
}
if (remove.right != null) {
queue.add(remove.right);
}
}
floor++;
}
return root;
}
}
- 总结:也算是比较简单的题目,因为层序遍历本身不难,而且套路也比较统一。