# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
# 深度优先遍历:先序,中序,后序
def deepOrder(self, root: TreeNode):
if not root:
return []
# res为指定遍历方式的结果
# stack栈,利用栈FILO的特点,根据先中后排序规则"倒着"压入栈(出栈的顺序即为我们要的结果)
res, stack = [], [root] # 传入根节点
while stack:
# 出栈
node = stack.pop()
# 如果当前node的class为TreeNode,就表示还有子节点
if isinstance(node, TreeNode):
# 先序
stack.extend([node.right, node.left, node.val])
# 中序
# stack.extend([node.right,node.val,node.left])
# 后序
# stack.extend([node.val,node.right,node.left])
# 否则如果是int类(当树是由字符串组成时,就是str类),表示无子节点,就可以加入结果list里了
elif isinstance(node, int):
# elif isinstance(node,str) or isinstance(node,int):
res.append(node)
return res
# 广度优先:层序遍历
def lvOrder(self,root: TreeNode):
# 队列:FIFO
res, queue = [],[root]
while queue:
node = queue.pop(0)
res.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return res
有不懂的欢迎留言,我会尽全力解答,大家一起学习,一起进步