0.总结

  • 官方题解并非这么做的
  • 博客来源:​​LawsonAbs@CSDN​

1.​​题目​​

2.思想

想法:想转化成左链子树,然后再​​reverse​​​一下得到右链子树。
第一步的实现稍微有些不好想,但是也是可以尝试的嘛,第二步reverse就比较简单了。

3.代码

# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def flatten(self, root: TreeNode) -> None:
"""
Do not return anything, modify root in-place instead.
"""
# 改成左链形式
self.dfs(root)
self.reverse(root)

# 翻转二叉树
def reverse(self,root):
if root is None:
return None
left_root = self.reverse(root.left)
right_root = self.reverse(root.right)
root.left = right_root
root.right = left_root
return root

def dfs(self,root):
if root is None:
return

self.dfs(root.left)
tmp = root
while(tmp.left):
tmp = tmp.left

# 上面这个只是找到了合适的根节点,但是仍未把右子树(左化)
self.dfs(root.right)
tmp.left = root.right
root.right = None # 置为空
return