亚马逊访谈:BST中叶节点的总和

时间:2012-10-18 11:51:46

标签: algorithm data-structures

我为此撰写的代码:

   sumBST(BST *root)
     {
         static sum =0;
         if (root!= null)
           {
              if (root->left != null || root->right != null)
                {
                  sum = sum + sumBST(root->left) + sumBST(root->right);
                  return sum;
                }
              else
                {
                   root->data;
                }
           }
         else
            {
               return 0;
            }
        return sum;
     }

我通过绘制递归树来检查它似乎很好但是我仍然感到困惑,我在做某些错误。请纠正我,我在这里做错了。

2 个答案:

答案 0 :(得分:1)

嗯,好像你实际上并没有添加叶子节点的总和。
在parcticular - 线:

root->data

实际上不会返回数据,只是读取它。 在伪代码中应该是类似的东西:

sumBST(node):
    if (root == null):
       return 0
    else if (root->left == null && root->right == null)  
       //add the value of the node if it is a leaf, this step is missing
      return root->data;
    else:
      return sumBST(root->left) + sumBST(root->right)

修改
代码中的问题如下(澄清并进一步解释答案中的这一点):

你应该在某处返回叶子的数据 - 这不会发生在代码中的任何地方 - 我怀疑你想在root->data中返回它。

但请注意,递归将转到每个叶子 - 它只是缺少从每个叶子返回值。

答案 1 :(得分:1)

这个问题的目的主要集中在评估候选人思维过程。

我在这里看到的只是拼写错误

root->data => return root->data

以及从未到过的指令

return sum;

和一个过长的指令

 sum = sum + sumBST(root->left) + sumBST(root->right); => return sumBST(root->left) + sumBST(root->right);

采访者总是喜欢质疑他们给出的问题。 一个问题,比如“BST是给定的,还是我可以设计一个针对给定叶片总和而优化的结构?”,“BST有多大?”......可以添加一个加号,最有可能完全改变你的答案。