您的位置:首页 > 编程语言 > Python开发

LeetCode 623 在二叉树中增加一行 Python

2018-09-29 21:41 344 查看

给定一个二叉树,根节点为第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

注意:

  1. 输入的深度值 d 的范围是:[1,二叉树最大深度 + 1]。
  2. 输入的二叉树至少有一个节点
    [code]class Solution:
    def addOneRow(self, root, v, d):
    """
    :type root: TreeNode
    :type v: int
    :type d: int
    :rtype: TreeNode
    """
    if d == 1:
    tmp = TreeNode(v)
    tmp.left = root
    return tmp
    
    #讨论d>1的情形
    queue = [(root,1)]
    #首先要将所有d-1层的节点都加进来
    while queue:
    item = queue.pop(0)
    (TmpNode,depth) = item
    if depth >= d-1:
    queue.insert(0,(TmpNode,depth))
    break
    if TmpNode.left: queue.append((TmpNode.left,depth+1))
    if TmpNode.right: queue.append((TmpNode.right,depth+1))
    #此时所有depth=d-1的节点都放进了queue
    
    for (node,depth) in queue:
    tmp = node.left
    mynode = TreeNode(v)
    node.left = mynode
    mynode.left = tmp
    
    tmp = node.right
    mynode = TreeNode(v)
    node.right = mynode
    mynode.right = tmp
    
    return root

     

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: