解法一:
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)
解法二:
print方法是一个很原始的模板,现在题目要求要返回一个列表。
我们要用一个list来不停的append新的结点值,那么这个方法的入参就需要传入这样的一个list,并且这个方法返回的值也应该是这个list,那么我们就应该新写一方法来承载这两个入参。
原函数就应该调用这个新的方法,传入root和一个初始化的数组res,然后在新的方法里更新这个res,在原方法里最终返回这个数组,(这个数组传入新函数之后一直在更新,所以不需要用一个返回值来接收,可以直接返回这个变量),然后应该在新的方法里面去递归遍历并传入更新后的res,把print的那一行改为累加结点值res.append(root.val)以达到保存所有结点值的效果
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
# if not root 这一步在preOrder里面做了
res = []
self.preOrder(root, res)
return res
def preOrder(self, root, res):
'''对root的判空其实是在这里做了,所以原方法就不需要对root再一次判空'''
if not root:
return res
res.append(root.val)
self.preOrder(root.left, res)
self.preOrder(root.right, res)
return res
法三:
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
def dfs(root):
if not root:
return
res.append(root.val)
dfs(root.left)
dfs(root.right)
res = []
dfs(root)
return res
法四:
使用python函数extend方法将每次的值添加到列表中
if root is None:
return []
self.out.extend([root.val])
self.preorderTraversal(root.left)
self.preorderTraversal(root.right)
return self.out
版权声明:本文为jhsignal原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。