各位高手,请帮帮我,关于二叉树的遍历问题,急等
这是我的作业,我看了好几天都找不出错。好快就要变作业了,帮帮我。
我的编译过了,但是运行时在PREORDER中的显示current->data时运行停顿,说我不知什么错误,请大家一定要帮帮我,我快要交了。
以下是头文件:
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
#include <iostream.h>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TMainMenu *MainMenu1;
TMenuItem *f1;
TMenuItem *n1;
TMenuItem *E1;
TMenuItem *M1;
TMenuItem *N2;
TMenuItem *N3;
TMenuItem *N4;
TMenuItem *N5;
TMenuItem *N6;
TMenuItem *N7;
TMenuItem *N8;
TMenuItem *N9;
TMenuItem *N10;
TMenuItem *N11;
TMenuItem *N12;
void __fastcall E1Click(TObject *Sender);
void __fastcall n1Click(TObject *Sender);
void __fastcall N6Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
class btreenode
{
public:
char data;
btreenode *lchild;
btreenode *rchild;
};
class blinknode
{
public:
btreenode* head;
btreenode* create(int first);
void preorder(btreenode *t,int first);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
以下是。CPP文件:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
blinknode t;
int i=5;
int j=5;
void __fastcall TForm1::E1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
btreenode* blinknode::create(int first)
{
String c;
btreenode *current;
c=InputBox("建树","请输入元素的代号:"," ");
char *ch;
ch=c.c_str();
if(*ch=='.')
current=NULL;
else
{
current=new btreenode;
current->data=*ch;
if(first)
{
head=current;
first=0;
}
current->lchild=create(first);
current->rchild=create(first);
return current;
}
}
void blinknode::preorder(btreenode *t,int first)
{
btreenode *current;
if(first)
{
first=0;
Form1->Canvas->TextOut(i,j,"以下是前序遍历递归的结果:");
j=j+2;
}
else current=t;
if(current!=NULL)
{
Form1->Canvas->TextOut(i++,j,current->data);//在此处出现停顿,报错
preorder(current->lchild,first);
preorder(current->rchild,first);
}
}
void __fastcall TForm1::n1Click(TObject *Sender)
{
t.create(1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N6Click(TObject *Sender)
{
t.preorder( t.head,1);
i=5;
}
//---------------------------------------------------------------------------
问题点数:0、回复次数:3Top
1 楼h2plus0(~~~)回复于 2003-12-01 02:27:35 得分 0
create(int first) 函数有问题!!!
你可参考一下<<数据结ASDFA构>>(清华版) 128 页 的程序,
感觉不用什么 first 这些变量啊,另外 cb 有很多调试方法,
比如断点, 你会觉得很有用的!
相信你一定能成的!
Top
2 楼ayumixxx(ayumi)回复于 2003-12-01 12:22:37 得分 0
帮顶一下Top
3 楼matq2008(叶子.net)回复于 2003-12-01 12:42:39 得分 0
分配内存Top




