【问题标题】:Storing results in a recursive function/ BST将结果存储在递归函数/ BST 中
【发布时间】:2014-04-08 09:47:28
【问题描述】:

我正在编写一个 bst 函数,它将给定范围内的所有键存储为字符串:

 String rangeToString(TreeNode root,int low, int high, String result){
  if(root==null) return ""; 
  if(root.key>low)) rangeToString(root.leftChild, low, high,result);
  if(root.key>=low && root.key.<=high) result+=root.key;
  if(root.key<high) rangeToString(root.rightChild,low,high,result);
  return result;

}

我基本上是在进行中序遍历,当它们在范围内时将值添加到字符串中。 目前它返回一个只包含根键的字符串。 我知道问题出在我的 return 语句中,但我似乎无法在没有它们的情况下实现该功能。 谁能指出我正确的方向吗?

【问题讨论】:

    标签: recursion binary-search-tree traversal


    【解决方案1】:

    首先,您可能希望在递归调用中包含 return,因为您正在返回递归的结果:

    String rangeToString(TreeNode root,int low, int high, String result){
      if(root==null) return ""; 
      if(root.key>low)) return rangeToString(root.leftChild, low, high,result);
      if(root.key>=low && root.key.<=high) result+=root.key;
      if(root.key<high) return rangeToString(root.rightChild,low,high,result);
      return result;
    }
    

    我对你的条件持怀疑态度,所以我会花一些时间检查这些......事实上,递归的回报正在对你的条件结构做出假设。

    此外,一种非常直观的收集参数的方法是使用尾递归并将结果累积到参数中。

    您可以在此处阅读更多内容: http://en.wikipedia.org/wiki/Tail_call

    关键是你自己使用参数来收集结果,当你的函数完成时,你返回你的参数(那些累积结果的参数)。

    【讨论】:

      【解决方案2】:

      您可以将一个补充的“迄今为止累积”的字符串列表传递给您的参数(假设您将其命名为curlist)。然后,当您返回时,您返回此 curlist argument + .Add(your found key for this recursion level) 并在递归调用函数 (rangeToString) 的地方将结果连接到当前列表 curlist(使用 Append 或其他)。

      伪代码:

      list<string> myRecursiveFunc(some args, list<string> curlist)
      {
         if (recursConditionOK)
            curlist = curlist.Append(myRecusriveFunc, curlist);
         return curlist;
      }
      

      【讨论】:

        猜你喜欢
        • 2018-08-17
        • 1970-01-01
        • 2020-02-02
        • 1970-01-01
        • 2019-06-19
        • 1970-01-01
        • 2014-06-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多