首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于 二叉树建立 跳不出递归

2012-03-19 
求助关于 二叉树建立 跳不出递归#includestdafx.h #includeiostream#includestringusingnamespacest

求助关于 二叉树建立 跳不出递归
#include   "stdafx.h "
#include   <iostream>
#include   <string>
using   namespace   std;

template <   class   Object   >
class   BinaryNode
{
public:
BinaryNode():left(NULL),right(NULL){};
~BinaryNode(){};
public:
Object   element;
BinaryNode   *left;
BinaryNode   *right;
};


template   <   class   Object   >
class   BinaryTree
{
public:
BinaryTree():root(NULL){}
  int   CreatTree   (BinaryNode <Object>   *&b);
  void   OutPut(BinaryNode <Object>   *o);


BinaryNode <   Object   > *   root;


};

template   <   class   Object>
int   BinaryTree <Object> ::CreatTree(BinaryNode <Object>   *&b)
{

Object   t;
        cout   < <   "input   a   date; "   < <endl;
        cin   > >   t;
if   (   t   ==   '#   '   )

{      
    b   =   NULL;   return   1;
           
}
else{  
b   =   new   BinaryNode <Object> ;
b-> element   =   t;
b-> left   =   NULL;
b-> right   =   NULL;
                BinaryTree <Object> ::CreatTree(   b-> left   );
BinaryTree <Object> ::CreatTree(   b-> right   );
}

return   0;

};
template   <class   Object>
void   BinaryTree <Object> ::OutPut(BinaryNode <Object>   *o)
{
if(o   !=   NULL)
{
cout   < <   o-> element   < <   endl;
BinaryTree <Object> ::OutPut(   o-> left   );
BinaryTree <Object> ::OutPut(   o-> right   );
}

}


int   _tmain(int   argc,   _TCHAR*   argv[])
{
BinaryTree <char>   tree;
tree.CreatTree(   tree.root   );
tree.OutPut(   tree.root   );
return   0;
}


[解决办法]
建议最好一次性输入前序遍历序列,在递归中cin即可.
关注.
[解决办法]
因为是二叉树,一个函数要调用两个递归函数。因此单单输入一个 '# '是除了空树,时不能结束的。(很容易算出,当建立了n个树节点时,需要输入n+1次 '# '才能结束建树)。所以,如果要继续这种方式,应该设置一个状态表示,表示是否已完成输入。在发现 '# '时,将这个表示设为true,此后int BinaryTree <Object> ::CreatTree(BinaryNode <Object> *&b) 在发现标志为true时,不再从cin中读入,而是直接将本节点设为空并返回。

或者就是先一次性读入,以指针形式存在一个容器中(如vector <BinaryTree <char> *> ),然后在从容器中读出,建树。当CreateTree发现容器为空时,表示建树完毕。

[解决办法]
1,楼主的判断是 '# ',多了一个空格
2,感觉设计上有问题

热点排行