【问题标题】:How recursion is used in tree树中如何使用递归
【发布时间】:2017-07-23 22:46:49
【问题描述】:

我是数据结构中树概念的新手。我可以为简单的树问题编写线性代码,但是当我尝试将其转换为递归代码时,我非常吃力。而且我无法为复杂的树问题编写递归代码。但我知道树是如何工作的。当我尝试将线性代码转换为递归代码以解决“查找树的高度”问题时遇到了问题 我可以画出来并想象纸上的流动。但是我不会写递归。

【问题讨论】:

  • 不确定您的问题到底是什么,但递归在树上的工作方式与在其他地方的工作方式完全相同。关键是识别一个重复/重复的逻辑,然后将其编码为一个调用自身的函数。
  • 你需要先学习inorder.preorder.postorder的遍历和他们的.每个代码只有 4 行,然后您在遍历时输入的每个新级别都会添加计数器

标签: algorithm recursion data-structures


【解决方案1】:

这里的关键是要理解树的每个节点本身就是一棵树。事实上,这就是允许您实现递归算法的原因。您可能知道,任何递归算法都需要两个部分:

  1. 停止标准。在这种情况下,我们将定义一棵空(null)树的高度为 0。
  2. 递归部分。在这种情况下,我们可以说一棵树的高度是 1 加上它最深的孩子的高度。

所以,例如,如果我们用 Java 实现:

public static int height(Node n) {
    if (n == null) {
        return 0;
    }
    return 1 + Math.max(height(n.getLeft()), height(n.getRight()));
}

【讨论】:

    【解决方案2】:

    任何节点的高度,是其“最高”子节点的高度 + 1。因此,从根开始,递归地在每个子节点上调用 find height 函数,选择最大的,加 1,然后返回价值。基本情况是一个没有子节点的节点,在这种情况下返回 0。

    【讨论】:

      猜你喜欢
      • 2019-07-29
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      相关资源
      最近更新 更多