leetcode114二叉树展开为链表。击败97% python 代码+思路

"""
给定一个二叉树,原地将它展开为链表。

例如,给定二叉树
    1
   / \
  2   5
 / \   \
3   4   6

将其展开为:
1
 \
  2
   \
    3
     \
      4
       \
        5
         \
          6
"""

'''
思考:就地转换,其实就是将left置空,然后用right表示 next
投机取巧:前序遍历,存入列表,将列表相连(其实这不满足就地转换的条件)
真正办法:
寻找当前节点1左子树最右边的点4
将56接到4后面
1左子树转为右子树,左子树置空。
    1
     \
      2
     / \
    3   4
         \
          5
           \
            6

继续遍历右子树
'''

# Definition for a binary tree node.
from tag_tree import TreeNode


class Solution:
    def flatten(self, root: TreeNode) -> None:
        """
        Do not return anything, modify root in-place instead.
        """
        # 左子树为空,直接考虑下个点
        while root:
            # 记录左子树最右边节点
            if root.left:
                pre = root.left
                while pre.right:
                    pre = pre.right
                # 左子树最右边节点连上当前节点右子树
                pre.right = root.right
                root.right = root.left
                root.left = None
                # 下一个
            root = root.right


tree = TreeNode(1)
tree.left = TreeNode(2)
tree.left.left = TreeNode(3)
tree.left.right = TreeNode(4)
tree.right = TreeNode(5)
tree.right.right = TreeNode(6)

Solution().flatten(tree)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值