读书人

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

发布时间: 2012-03-19 22:03:05 作者: rapoo

求助关于 二叉树建立 跳不出递归
#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,感觉设计上有问题

读书人网 >C++

热点推荐