存储结果为递归函数/ BST

时间:2014-03-06 01:21:38

标签: recursion binary-search-tree traversal

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

 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语句中,但我似乎无法在没有它们的情况下实现该函数。 有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

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

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

关键是您自己使用参数来收集结果,当您的功能完成后,您将返回参数(累积结果的参数)。

答案 1 :(得分:0)

你可以将一个补充的“累积到现在”的字符串列表(比如你的名字curlist)传递给你的论据。然后当你返回时返回这个curlist argument + .Add(your found key for this recursion level)并在你递归调用fonction(rangeToString)的地方你将结果连接到当前列表curlist(使用Append或其他)。

伪代码:

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