请教一道上海交大数据结构考研编程题目!(我现在正在准备考研,请好心人帮忙看看)
题目是:
从键盘上输入若干个数对,如(I1,W1),(I2,W3).....(Im,Wm);其中I1,I2,.....Im,
是本结点的层号。注意根结点的层号为1,其经各层上的结点的层号依次比上上层上的结点的层号大1。另外,W1W2....Wm是结点的前序(即先根次序)序列。这是用层号加上前序表示树的一种方法。请编写一段程序,存储这个树。为简单起见,设这棵树上的结点度数最大为3,结点的存储形式为:
data parent son1 son2 son3
...............................
:....:.....:......:......:.....:
我写了下面一段程序(我只考虑了data,son1,son2,son3域)
#define NULL 0
#include <iostream.h>
template <class Type>
class TreeNode{
public:
Type value;
TreeNode<Type> *son1,*son2,*son3,*parent;
TreeNode(Type value=0):value(_value),son1(NULL),son2(NULL),son3(NULL),parent(NULL){}
};
template <class Type>
class Node{
public:
int layer;
Type value;
};
template <class Type>
void CreatTree( TreeNode<Type> *T,int ptr_head,int ptr_tail,Node<Type> *_Array ){
int firstson_tail,secondson_tail;
if( ptr_head <= ptr_tail )
{
T=new TreeNode<Type> ( (_Array+ptr_head)->value );
if( ptr_head < ptr_tail )//正在处理的节点T不是叶子节点
{
/******计算第一棵子树在数组中的结束位置******/
int i=ptr_head+2;
while(i<=ptr_tail)
{
if( (_Array+i)->layer > (_Array+ptr_head+1)->layer ) i++;
else break;
}
firstson_tail=i-1;
/*****************创建第一棵子树************/
CreatTree(T->son1,ptr_head+1,firstson_tail,_Array);
/*******************************************/
if( firstson_tail < ptr_tail )//第二棵子树存在
{
/******计算第二棵子树在数组中的结束位置******/
int j=i+1;
while(j<=ptr_tail)
{
if( (_Array+j)->layer > (_Array+ptr_head+1)->layer ) j++;
else break;
}
secondson_tail=j-1;
/*****************创建第二棵子树************/
CreatTree(T->son2,firstson_tail+1,secondson_tail,_Array);
/*******************************************/
if( secondson_tail < ptr_tail )//第三棵子树存在
{
/*****************创建第三棵子树************/
CreatTree(T->son3,secondson_tail+1,ptr_tail,_Array);
/*******************************************/
}
}
}
}
}
void main(){
Node<char> Array[12];
Array[0].layer=1; Array[0].value='A';
Array[1].layer=2; Array[1].value='B';
Array[2].layer=3; Array[2].value='E';
Array[3].layer=4; Array[3].value='I';
Array[4].layer=4; Array[4].value='G';
Array[5].layer=4; Array[5].value='K';
Array[6].layer=3; Array[6].value='F';
Array[7].layer=4; Array[7].value='L';
Array[8].layer=2; Array[8].value='C';
Array[9].layer=3; Array[9].value='G';
Array[10].layer=2; Array[10].value='D';
Array[11].layer=3; Array[11].value='H';
TreeNode<char> *root;
CreatTree(root,0,11,Array);
}
我现在遇到的问题是:为什么程序在执行完了以后,root指针并非为根结点
比如:我在程序最後执行了cout<<root->value;
结果程序不能正常结束。
请高手帮我看看到底是怎么回事!感谢万分!