leetcode 623 在二叉树中增加一行
解题思路:根据题目我们要分两种情况进行讨论。
1.当插入的位置为根结点,则我们直接创建一个结点,并让它的左子树连接根结点。
2.当插入的位置不是根结点,那我们需要找到插入层的前一层,例如我要插入第三层,那么我需要找到第二层的结点,让其连接新插入的结点,再让新结点连接之前第三层的结点。这个过程我们通过递归遍历二叉树的左右子树,直到depth = n-1时执行上面所说的操作。
class Solution {
public TreeNode addOneRow(TreeNode root, int v, int d) {
if(d == 1){//若在第一层直接插入,因为是根结点,所以不用插入两个结点
TreeNode n = new TreeNode(v);
n.left = root;
return n;
}
insert(root,v,d,1);
return root;
}
public void insert(TreeNode node,int v,int d,int depth){
if(node == null){
return;
}
if(depth == d-1){
TreeNode t = node.left;
node.left = new TreeNode(v);
node.left.left = t;
t = node.right;
node.right = new TreeNode(v);
node.right.right = t;
}else{
insert(node.left,v,d,depth+1);
insert(node.right,v,d,depth+1);
}
}
}