題目
給定一個二叉樹,根節點爲第1層,深度爲 1。在其第 d 層追加一行值爲 v 的節點。
添加規則:給定一個深度值 d (正整數),針對深度爲 d-1 層的每一非空節點 N,爲 N 創建兩個值爲 v 的左子樹和右子樹。
將 N 原先的左子樹,連接爲新節點 v 的左子樹;將 N 原先的右子樹,連接爲新節點 v 的右子樹。
如果 d 的值爲 1,深度 d - 1 不存在,則創建一個新的根節點 v,原先的整棵樹將作爲 v 的左子樹。
示例 1:
輸入:
二叉樹如下所示:
4
/ \
2 6
/ \ /
3 1 5
v = 1
d = 2
輸出:
4
/ \
1 1
/ \
2 6
/ \ /
3 1 5
示例 2:
輸入:
二叉樹如下所示:
4
/
2
/ \
3 1
v = 1
d = 3
輸出:
4
/
2
/ \
1 1
/ \
3 1
注意:
輸入的深度值 d 的範圍是:[1,二叉樹最大深度 + 1]。
輸入的二叉樹至少有一個節點。
思路
層序遍歷,判斷層數與d的關係,在添加進去,特殊情況當d=1時,這個時候直接在頭結點添加就可以了。
代碼
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def addOneRow(self, root: TreeNode, v: int, d: int) -> TreeNode:
if d==1:
t=TreeNode(v)
t.left=root
return t
def add(r,i):
if r:
if i<d-1:
add(r.left,i+1)
add(r.right,i+1)
else:
t=TreeNode(v)
t.left=r.left
r.left=t
t=TreeNode(v)
t.right=r.right
r.right=t
add(root,1)
return root