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