печать порядка двоичного дерева поиска путем передачи переменной в рекурсивную функцию - PullRequest
0 голосов
/ 08 декабря 2011

Я создаю двоичное дерево поиска для класса, и вставка работает нормально, моя единственная проблема - отображать число рядом с каждым печатаемым элементом, например

  1. Стивен $ 80
  2. Джо $ 10
  3. Джон 3 $

моя функция печати является рекурсивной и печатает в обратном порядке сначала большими элементами (правое дерево), я думал, что передам функцию int, инициализированную в 0, и увеличим ее для каждой печати, чтобы она читала 1,2 , 3 ... но рекурсивный характер самой функции, вызывающей саму себя, вызывает у меня некоторые проблемы. Любая помощь или предложения будут с благодарностью.

void CTree::PrintTree(TreeNode*& tree, int count){ 

    count++;

    if (tree != NULL){         
        PrintTree(tree->right, count);  // Print right subtree.
        cout << count <<" " << tree->name << " $" << tree->bribe << endl; //print node
        PrintTree(tree->left, count);   // Print left subtree.
    }
} 

Ответы [ 2 ]

0 голосов
/ 08 декабря 2011

Другой подход (нестатический) заключался бы в инкапсуляции int в классе и предоставлении методов для добавления и получения.Используйте объект этого класса в качестве передаваемого параметра, добавьте () перед печатью и получите во время печати. ​​

В Java

static class Counter
{
int count;
void add(){
    count++;
}

int get(){
    return count;
 }
 }

Теперь при печати:

void PrintTree(TreeNode tree, Counter counter){
    if(tree != null){
        PrintTree(tree.right, counter);
        counter.add();
        System.out.println(counter.get()+ " " + tree.name + " $" + tree.bribe);
        //cout << count <<" " << tree->name << " $" << tree->bribe << endl; //print node
        PrintTree(tree.left, counter);
     }
 }
0 голосов
/ 08 декабря 2011
void CTree::PrintTree(TreeNode*& tree, Bool isRoot=true){ 

    static int count=0;
    if(isRoot) count=0; else count++;

    if (tree != NULL){         
        PrintTree(tree->right, false);  // Print right subtree.
        cout << count <<" " << tree->name << " $" << tree->bribe << endl; //print node
        PrintTree(tree->left, false);   // Print left subtree.
    }
} 

назовите это просто PrintTree(tree) или PrintTree(tree,true)

...