Algorithm 二叉树上的预序遍历与深度优先搜索相同吗?

Algorithm 二叉树上的预序遍历与深度优先搜索相同吗?,algorithm,tree,binary-tree,depth-first-search,preorder,Algorithm,Tree,Binary Tree,Depth First Search,Preorder,在我看来,在这两种情况下,预顺序遍历和DFS都是相同的,我们以深度方式遍历叶节点。如果我错了,谁能纠正我 提前谢谢 预订单是DFS的一种类型 深度优先遍历有三种类型:预顺序、按顺序和后顺序 查看更多信息。这可能取决于深度优先的定义和实现 算法。JavaSwing的JTree的DefaultMutableTreeNode类 组件具有用于树遍历的以下枚举方法: depthFirstEnumeration() postorderEnumeration() 订单前消耗() 面包税() 在JavaSw

在我看来,在这两种情况下,预顺序遍历和DFS都是相同的,我们以深度方式遍历叶节点。如果我错了,谁能纠正我


提前谢谢

预订单是DFS的一种类型

深度优先遍历有三种类型:预顺序、按顺序和后顺序


查看更多信息。

这可能取决于深度优先的定义和实现 算法。JavaSwing的JTree的
DefaultMutableTreeNode
类 组件具有用于树遍历的以下枚举方法:

  • depthFirstEnumeration()
  • postorderEnumeration()
  • 订单前消耗()
  • 面包税()
在JavaSwing的实现中,
depthFirstEnumeration
是相同的 作为
postOrderEnumeration
。我的测试和 证实了这一点

其他人可以用不同的方式定义深度优先的含义。例如,一篇文章 关于前序和后序遍历是特定类型的状态 深度优先遍历。这意味着深度优先遍历
不是一个具体的遍历算法

不会的。Pre-order有一种严格的方式,先访问左节点,然后访问右节点。但是对于DFS来说,它可以是任意一种,因为没有严格的时尚。因此,基于您在堆栈上推送的内容,存在多个遍历。

直觉上,它们感觉相同,因为我们在大多数实现中使用递归(即使用隐式堆栈数据结构)应用DFS算法的方式。在大多数情况下(或全部情况下),结果与预顺序遍历的结果相同

DFS的理念是选择一个分支并深入该分支,彻底探索它。然而,选择分支并向下移动的方式取决于您正在实施的DFS类型。为了完成,在BFS算法中,我们按级别进行遍历

记住,预订单只是DFS的一种类型。我们还有其他方法,如下所示

图像来源:


为了更好地理解,请参考,甚至。

在我看来,问题并不是在寻找高级asnwer,我认为他是在寻找预排序DFS,这是计算机专业学生中常见的短期“DFS”。我认为他只是观察到,当所讨论的图形也是一棵树时,DFS的初始顶点是树的根,那么DFS和预序遍历是等价的。按序遍历对于k>2的k叉树没有意义。即使图是二叉树,预序树遍历的输出也不可能与前导子图的遍历相同,除非顶点邻接列表始终以与树中节点“子”相同的顺序枚举。也就是说,图形表示没有“左”和“右”子级的概念。实际上,二叉树上有六种类型的深度优先遍历——预序、后序、顺序、逆预序、逆后序和逆顺序。这对应于三个操作(3!)的六个排列,其中操作是“向左”、“向右”和“流程节点”。