1、递归遍历
最基础的一种遍历方式,按顺序调用递归来实现前、中、后序的方式的遍历
前序:
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
if root==None:
return []
ans = []
ans.append(root.val)
ans.extend(self.preorderTraversal(root.left))
ans.extend(self.preorderTraversal(root.right))
return ans
中序:
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
if root==None:
return []
ans = []
ans.extend(self.inorderTraversal(root.left))
ans.append(root.val)
ans.extend(self.inorderTraversal(root.right))
return ans
后序:
class Solution:
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
if root==None:
return []
ans = []
ans.extend(self.postorderTraversal(root.left))
ans.extend(self.postorderTraversal(root.right))
ans.append(root.val)
return ans
2、迭代法
递归的实现就是:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。
前序:
Python
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
if root == None:
return []
stack = [root]
ans = []
while len(stack) != 0:
node = stack[-1]
stack.pop()
ans.append(node.val)
if node.right != None:
stack.append(node.right)
if node.left != None:
stack.append(node.left)
return ans