网上查到的资料都很多,原理就不详细陈述了。
偶然看到有个大佬做的一个实现,此方法两次递归调用自己的方法。
代码稍加修改实现如下:
class TreeNode:
def __init__(self, val,left=None,right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def threeOrders(self , root ):
self.res = [[], [], []]
self.dfs(root)
return self.res
def dfs(self , root ):
if root is None:
return False
self.res[0].append(root.val)
self.dfs(root.left)
self.res[1].append(root.val)
self.dfs(root.right)
self.res[2].append(root.val)
return True
n1 =TreeNode(val="D")
n2 =TreeNode(val="E")
n3 =TreeNode(val="F")
n4 =TreeNode(val="B", left=n1, right=n2)
n5 =TreeNode(val="C", left=n3, right=None)
root =TreeNode(val="A", left=n4, right=n5)
a=Solution()
c=a.threeOrders(root)
print(c)
图例如下
A
B C
D E F
为了方便理解我把list的每一次变化都记录了下来。
[A] [] []
[AB] [] []
[ABD] [D] []
[ABD] [D] [D]
[ABD] [DB] [D]
[ABDE] [DB] [D]
[ABDE] [DBE] [D]
[ABDE] [DBE] [DE]
[ABDE] [DBE] [DEB]
[ABDE] [DBEA] [DEB]
[ABDEC] [DBEA] [DEB]
[ABDECF] [DBEA] [DEB]
[ABDECF] [DBEAF] [DEB]
[ABDECF] [DBEAF] [DEBF]
[ABDECF] [DBEAFC] [DEBF]
[ABDECF] [DBEAFC] [DEBFC]
[ABDECF] [DBEAFC] [DEBFCA]
结果:[['A', 'B', 'D', 'E', 'C', 'F'], ['D', 'B', 'E', 'A', 'F', 'C'], ['D', 'E', 'B', 'F', 'C', 'A']]
注:由于嵌套较多中间也算错过好几次,一定要注意每一次递归循环的变量,有时候多了带入会记混。
如果有更好的思路方法欢迎来提供。