c++:二叉树问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 05:48:39
这是关于二叉树的建立与前序算法。我的MAIN函数有问题不会改。请高手指教
#include <iostream>
using namespace std;
class BinTree;
class BinTreeNode
{
friend class BinTree;
private:
char element;
BinTreeNode*left;
BinTreeNode*right;

public:
BinTreeNode(char data,BinTreeNode*lchild=0,BinTreeNode*rchild=0)
{
element=data;
left=lchild;
right=rchild;
}
};

class BinTree
{
private:
BinTreeNode*root;
public:
BinTree()
{
root=0;
}
BinTree(char data,BinTree<ree,BinTree&rtree)
{
root=new BinTreeNode(data,ltree.root,rtree.root);
ltree.root=0;
rtree.root=0;
}
void delTree(BinTreeNode*p) //指向当前根节点
{
if(p)
{
if(p->left)
delTree(p->left);
if(p->right)
delTree(p->right);
delete p;
}
}
~BinTree()
{
delTree(root);
}

首先你类的成员函数有些问题:
1、BinTree带参数的构造函数
BinTree(char data,BinTree<ree,BinTree&rtree)
中间那段乱码应该是打错了,改为
BinTree(char data, BinTree<ree, BinTree&rtree)

2、PreOrder(BinTreeNode*p)函数中的那个cout后面的两个<,之间不应该有空格:
cout <<p->element;

下面看看主函数:
1、声明一个类的实例:BinTree B('B');
BinTree类没有只带一个参数的构造函数,可以新加一个只带一个参数的构造函数:
BinTree(char data)
{
root=new BinTreeNode(data,0,0);
}

2、S.PreOrder(root);
(1)S定义时,用的是不带参数的构造函数,那么S是空的,这里可以将S改为A
(2)root没赋值。这里函数参数的理想值应该是A.root,也就是A.PreOrder(A.root),但由于root是类的私有成员,不能这么用,可以这么改:
新加个不带参数的PreOrder()函数:
void PreOrder()
{
if(root)
{
cout <<root->element;
PreOrder(root->left);
PreOrder(root->right);
}
}
主函数调用时,改为A.PreOrder();

修改后的主函数如下:
void main()
{
BinTree B('B');
BinTree D('D');
BinTree E('E');
Bi