二叉树的遍历python版(前中后序和广度优先遍历)
(最近学习人工智能的课程里老师有提到二叉树深度和广度优先搜索相关的内容,发觉自己还是容易混淆,因此整理此篇巩固记忆,希望对你也有所帮助)
深度优先和广度优先的最主要区别就是存储结点的方式不同。深度优先是从最左树的结点依次存储,即返回的结果是从根节点到最左子树的叶子结点的路径开始的,之后才不断增加其他结点(父节点/右结点/右子树)。
而广度优先搜索是每一层必须输出后再进行下一层的输出,这就需要借助队列先入先出的规则存储结点,将结点的左、右子节点依次存到队列再从头取出,实现按层序遍历的目的。
深度优先遍历——也叫前序遍历,从最左侧路径开始返回结果
class TreeNode(): #首先创建一颗二叉树 def __init__(self, value): self.value = value self.left = None #左树 self.right = None #右树 class Solution(): def DFS(self, root): #深度优先遍历 if root is None: return [] stack = [root] #使用栈存储结点,先入后出 result = [] #用来存放最终返回输出的结点列表 while stack: cur_node = stack.pop() result.append(cur_node.val) if cur_node