#include<iostream>
#include<cstdlib>
using namespace std;
struct BTNode
{
int data;
BTNode * lchild,* rchild;
};
const int MaxSize=100;
class BinaryTree
{
public:
BinaryTree();
~BinaryTree(void);
void PreOrder(BTNode * root);
void InOrder(BTNode * root);
void PostOrder(BTNode * root);
BTNode * CreateBtree();
void Release(BTNode * root);
BTNode * root;
};
这个问题,我被纠结了很长时间,主要是输入的问题,下面这个程序采用的是先序顺序输入,用*表示空接点,对叶子节点也如此。
header。cpp
#include"header.h"
BinaryTree::BinaryTree()
{
root=CreateBtree();
}
BTNode * BinaryTree::CreateBtree()
{
BTNode * root;
char ch;
cin>>ch;
if(ch=='*')
root=NULL;
else
{
root=new BTNode;
root->data=ch-'1'+1;
root->lchild=CreateBtree();
root->rchild=CreateBtree();u
}
return root;
}
void BinaryTree::PreOrder(BTNode * root)
{
if(root==NULL) return;
else
{
cout<<root->data<<" ";
PreOrder(root->lchild);
PreOrder(root->rchild);
}
}
void BinaryTree::InOrder(BTNode * root)
{
if(root==NULL) return;
else
{
InOrder(root->lchild);
cout<<root->data<<" ";
InOrder(root->rchild);
}
}
void BinaryTree::PostOrder(BTNode * root)
{
if(root==NULL)
return;
else
{
PostOrder(root->lchild);
PostOrder(root->rchild);
cout<<root->data<<" ";
}
}
}*/
BinaryTree::~BinaryTree()
{
Release(root);
}
void BinaryTree::Release(BTNode * root)
{
if(root!=NULL)
{
Release(root->lchild);
Release(root->rchild);
delete root;
}
}
main
#include"header.h"
int main()
{
BinaryTree bt;
cout<<"其前序遍历为:";
bt.PreOrder(bt.root);
cout<<endl;
cout<<"其中序遍历为:";
bt.InOrder(bt.root);
cout<<endl;
cout<<"其后序遍历为:";
bt.PostOrder(bt.root);
cout<<endl;
cout<<endl;
system("pause");
return 0;
}