2010-04-12 88 views
0

我已经实现了一个功能节点插入到它像这样不工作的功能,没有错误

template<class nodetype> 
void AVLtree<nodetype>::display() const 
{ 
display(Proot); 
} 

template<class nodetype> 
void AVLtree<nodetype>::display(Node<nodetype> * ptr) const 
{ 
if(ptr==0) 
    return ; 
cout<<ptr->value<<" "; 
display(ptr->Pleft); 
display(ptr->Pright); 
} 
编译后

后显示AVL树,没有任何错误,程序工作,但什么也没有印上屏幕

请帮我.... .... 谢谢

+3

我没有在这里看到的一个问题。你怎么填满你的树? – 2010-04-12 22:45:05

+0

没有错误?那么警告呢?任何只是因为你的代码在语法上是正确的,并不意味着它是非常正确的:) – hhafez 2010-04-12 22:48:23

+0

什么是nodetype?你确定发送给cout时应该打印什么吗? – 2010-04-12 22:52:54

回答

4

(假设你的树是正确构建的)。屏幕输出通常是行缓冲的。您需要输出std::endlstd::cout(或至少'\n'字符)才能显示屏幕上的内容。

当然,如果你的树被错误地构建,根指针可能是空的,并且由于显而易见的原因(只是一个猜测)什么都不会被打印出来。

最后,即使你的树是否正确建立,但所有数据(ptr->value)是说,只是字符串是空的(例如),或者只包含空格,那么毫无疑问你不能在屏幕上看到什么。

1

如果你是一个控制台窗口打印,该功能可能是有用的:

void Pause(void) 
{ 
    cout << "\nPaused, press ENTER to continue.\n"; 
    cin.ignore(10000, '\n'); 
    return; 
} 

调用任何exit方法或mainreturn语句之前此功能。

+0

虽然我个人更喜欢std :: getline(在标题),而不是cin.ignore:std :: string buffer; std :: getline(cin,buffer); – 2010-04-12 23:08:28

3

一种技术我喜欢用是增加周围调试字符串分隔符:

cout << "-->" << ptr->value << "<--" << endl; 

这样一来,很容易空输出无输出区分。

您可能还需要补充一点,就是显示当你整个树是空的:

void AVLtree<nodetype>::display() const 
{ 
    if (Proot) 
    display(Proot); 
    else 
    cout << "empty tree" << endl; 
} 
+0

谢谢你, 这个工作和“空树”被打印在屏幕上...... 错误不在这个函数中 – aya 2010-04-13 15:09:23

-2

首先你需要一个概念检修..谁告诉你,你可以用0 PTR比较? 你是否试图建议一个指针,如果无效等于0?那是完全错误的..试试这个:

#include<iostream> 
#include<conio.h> 

using namespace std; 

int main() { 

    int *p = NULL ; 
    cout<<*p<<endl; 

    getch(); 
    return 0; 
} 

,并在那里,你的程序崩溃...用NULL而不是0比PTR ..

+2

在C++中,NULL和0是相同的东西。有关Stroustrup自己的详细信息,请参阅http://www2.research.att.com/~bs/bs_faq2.html#null。另外,使用'int * p = 0;'并试图用'* p'解引用也会导致崩溃。 – Dustin 2010-04-13 00:44:49

+3

-1,对不起。 'NULL'被精确定义为0.经过预处理,'if(p == NULL)'和'if(p == 0)'是无法区分的。 – GManNickG 2010-04-13 00:57:17