在二叉樹中增加一行

題目

給定一個二叉樹,根節點爲第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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章