1.题目描述
2.解题思路
假设递归函数返回一个pair(N1,N2),分别指的是当前子树的最左侧的节点和当前子树的最右侧节点,中间的点先不用管。
参考视频:https://www.acwing.com/video/173/
具体看代码
3.代码实现
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def dfs(self,root):
# 当前节点是叶子节点
if not root.left and not root.right:
return (root,root)
if root.left and root.right:
left_a,left_b=self.dfs(root.left)
right_a,right_b=self.dfs(root.right)
# 拼接
left_b.right=root
root.left=left_b
right_a.left=root
root.right=right_a
# 最后再把当前整棵树的最左最右返回
return (left_a,right_b)
# 没有右子树,根节点就是最右边的节点
if root.left:
left_a,left_b=self.dfs(root.left)
left_b.right=root
root.left=left_b
return (left_a,root)
if root.right:
right_a,right_b=self.dfs(root.right)
right_a.left=root
root.right=right_a
return (root,right_b)
def Convert(self, pRootOfTree):
# write code here
if not pRootOfTree:
return pRootOfTree
a,b=self.dfs(pRootOfTree)
return a