力扣刷题笔记--二叉树[leetcode][LCP67]

二叉树的相关知识有点忘了,补了一下,链接如下:

二叉树的python实现

说回这个题,这个题乍一看不难,二叉树相关的题最明显的思路就是递归求解,装饰树有几种情况:
1.  全为空,返回None即可;
2.  只有根节点,返回根节点即可;
3.  根节点root有左子节点(左子节点和右子节点分开讨论),将root的左子节点指向新生成的节点-1,原先的root节点的左子节点变成了现在的root节点的左子节点的左子节点,而这个左子节点也有几种情况可以讨论(仅讨论左边,右边的情况一会说),也就是我们分析的【2,3】,因此这次很自然地想到可以递归,调用函数本身,这个root节点的左子节点的左子节点变成了新的root,如果是只有它本身就是【2】的情况,如果是它还有其他的左子节点就继续递归,也就是再调用函数本身,情况【3】。
4. 右子节点的情况和左子节点一样,只是一个left一个right,不再赘述。

代码如下:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def expandBinaryTree(self, root):
        """
        :type root: Optional[TreeNode]
        :rtype: Optional[TreeNode]
        """
        if not root:
            return None
        if not root.left and not root.right:
            return root
        if root.left:
            tmp = root.left
            newnode = TreeNode(-1)
            root.left = newnode
            root.left.left = self.expandBinaryTree(tmp)
        if root.right:
            tmp = root.right
            newnode = TreeNode(-1)
            root.right = newnode
            root.right.right = self.expandBinaryTree(tmp)

        return root

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值