Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 一阶和深度一阶递归树遍历_Algorithm_Tree_Traversal - Fatal编程技术网

Algorithm 一阶和深度一阶递归树遍历

Algorithm 一阶和深度一阶递归树遍历,algorithm,tree,traversal,Algorithm,Tree,Traversal,是否有任何算法可以以一级顺序递归遍历一棵树,而以后级顺序非递归遍历一棵树。非常感谢。说 遍历 与线性数据结构相比 比如链表和一维 阵列,其中只有一个逻辑 遍历方式,树结构 可以在许多不同的位置进行遍历 方式。从二进制文件的根开始 树,有三个主要步骤 可在中执行,且顺序为 它们的执行定义了 遍历类型 这些步骤(第 特定顺序)是:执行 当前节点上的操作(参考 作为“访问”节点),遍历 到左侧子节点,并遍历 到右侧子节点。因此 这个过程最容易描述 通过递归 在中遍历非空二叉树的步骤 预先订购,执行以下

是否有任何算法可以以一级顺序递归遍历一棵树,而以后级顺序非递归遍历一棵树。非常感谢。

遍历

与线性数据结构相比 比如链表和一维 阵列,其中只有一个逻辑 遍历方式,树结构 可以在许多不同的位置进行遍历 方式。从二进制文件的根开始 树,有三个主要步骤 可在中执行,且顺序为 它们的执行定义了 遍历类型

这些步骤(第 特定顺序)是:执行 当前节点上的操作(参考 作为“访问”节点),遍历 到左侧子节点,并遍历 到右侧子节点。因此 这个过程最容易描述 通过递归

在中遍历非空二叉树的步骤 预先订购,执行以下操作 在每个节点上递归操作, 从根节点开始:

  • 访问节点
  • 遍历左子树
  • 遍历右子树。(这也称为
  • 在中遍历非空二叉树的步骤 依次执行以下操作 在每个节点上递归操作:

  • 遍历左子树
  • 访问节点
  • 遍历右子树。(这也称为对称遍历。)
  • 在中遍历非空二叉树的步骤 postorder,执行以下操作 在每个节点上递归操作:

  • 遍历左子树
  • 遍历右子树
  • 访问节点
  • 最后,还可以遍历树 在级别中,我们访问 在转到标高之前,标高上的节点 下层。这也叫


    通过使用堆栈而不是递归中使用的隐式调用堆栈,您可以按后序迭代递归树。

    要获得有效的递归宽度优先搜索,您可以使用。它特别适用于分支因子较高的情况,在这种情况下,常规的广度优先搜索往往会因过度内存消耗而阻塞

    编辑:,但为了完整起见,对算法进行了如下描述:

  • 将根节点排队
  • 将节点出列并检查它。
    • 如果在此节点中找到所需的元素,请退出搜索并返回结果
    • 否则,将尚未发现的任何后续节点(直接子节点)排队
  • 如果队列为空,则图表上的每个节点都已检查–退出搜索并返回“not found”
  • 重复步骤2
  • 注意:使用堆栈而不是队列将此算法转换为深度优先搜索


    如果您想进行非递归的深度优先遍历,那么最后一行显然是很有趣的。获取预订单或后订单只是修改在步骤2.b中添加节点的方式。

    不,昨晚我参加了一家公司的纸上测试。所谓级别优先,你是指宽度优先?这并不能真正回答问题,你的后订单遍历是递归的,并且你没有发布宽度优先遍历的非递归解决方案。