Двоично дърво - Метод за рекурсивно преброяване на броя възли на ниво без параметър за броене (Java)

Търся да взема някакъв код, който съм написал на Java за клас на двоично дърво и да премахна параметъра за броене от аргументите, но да запазя всичко рекурсивно.

И така, даден клас с тези променливи:

 public class BinaryTree<E> {

  protected E data;
  protected BinaryTree<E> left,right;

Как мога да направя това за:

public int levelCount(int count, int level){
 if (data == null) {return 0;}
 if (count == level) {return 1;}
 else {
  return this.getRight().levelCount(count+1,level) + this.getLeft().levelCount(count+1,level);
  } 
}

Това трябва (и наистина) да върне броя на възлите на всяко дадено ниво на двоичното дърво.

Така че с дърво "thatTree", което изглежда така:

     2
   /    \
  6      3
 / \    / \
4   5  7   10 

thatTree.levelCount(0) връща 1, thatTree.levelCount(1) връща 2, thatTree.levelCount(2) връща 4


person mtrenal    schedule 29.10.2014    source източник
comment
Някой конкретен език?   -  person Scott Hunter    schedule 29.10.2014
comment
Имайте предвид, че това не е сайт за предоставяне на общи критики.   -  person Scott Hunter    schedule 29.10.2014
comment
Моля, дайте пример за това как това може да се нарече и какво ще върне; не е ясно какво се опитвате да изчислите тук.   -  person Scott Hunter    schedule 29.10.2014
comment
@ScottHunter Въпросът е основно езиково-агностичен и той очевидно се опитва да преброи колко възли съществуват на определена дълбочина в дървото. Всъщност той вече го е направил, но пита дали може да се направи без параметъра count.   -  person ooga    schedule 29.10.2014
comment
@ooga: Ако очаквате някой да пише код, най-малкото, което можете да направите, е да посочите езика. И ако обясните какво се опитвате да направите, кой знае, може просто да разрешите собствения си проблем.   -  person Scott Hunter    schedule 29.10.2014
comment
thatTree.levelCount(0) връща 1, thatTree.levelCount(1) връща 2, thatTree.levelCount(2) връща 4 ...??? Ти сам отговори на логиката на това, което търсиш. Дори не се нуждаете от рекурсия. Ако разбирам добре, това, което цитирах, е много различно от това, което първоначално попитахте..   -  person Karl Stephen    schedule 29.10.2014


Отговори (1)


Защо да не подадете един аргумент, да извадите 1 при всяка рекурсия и да завършите, когато е 0? Нещо като:

public int levelCount(int level){
  if (data == null || level < 1) {return 0;}
  if (level == 1) {return 1;}
  else {
    return this.getRight().levelCount(level-1) + this.getLeft().levelCount(level-1);
  } 
}
person user1879313    schedule 29.10.2014