【问题标题】:What type of traversal should be used to find the sum of a binary tree?应该使用什么类型的遍历来找到二叉树的总和?
【发布时间】:2013-10-20 20:17:57
【问题描述】:

以下问题出现在我的导师几年前进行的一次测试中。他提供了答案,但没有提供令人满意的解释。我已经用谷歌搜索了这个主题,但我没有找到太多。我希望社区可以帮助我理解这个概念。

为了找到二叉树中所有整数的总和,将使用哪种类型的遍历?

(A) 广度优先
(B) 深度优先顺序
(C) 深度优先后序
(D) 深度优先预购

我的导师说答案是 (C) 深度优先后序,但我不明白为什么。似乎他们都会工作。如果您有任何见解,我将不胜感激。

谢谢。

编辑: 我终于明白了为什么我的导师认为答案是 (C)。

如果您要在一条语句中编写一个加法运算的 sum 函数,例如:

    int addup(Node n)
    {
        if (n == nil) return 0;
        return addup(n.left) + n.value + addup(n.right);
    }

无论总和中项的顺序如何,遍历都是后序的。这是因为这两个函数在加法发生之前首先被评估。然而,正如 Keith Randall 在他的回答中所表明的那样,强制进行预排序或中序遍历是微不足道的。

【问题讨论】:

    标签: algorithm binary-tree depth-first-search tree-traversal


    【解决方案1】:

    任何遍历顺序都可以,因为 sum 是关联的和对称的。例如,深度优先顺序:

    int addup(Node n) {
        if (n == nil) return 0;
        int sum = addup(n.left);
        sum += n.value;
        sum += addup(n.right);
        return sum;
    }
    

    所有的遍历都承认一个简单的求和实现。

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 2012-01-01
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多