二叉树遍历 求C或C++的源代码

2025-03-31 23:32:54
推荐回答(1个)
回答1:

#include
using std::cin;
using std::cout;
using std::endl;

struct node 
{
    int data;
    node *lchild;
    node *rchild;
};

class binarytree
{
private:
    node *head;//root of binarytree
protected:
    void creat(node*&p);//creat tree
    void destroy(node *p);
    void _pretraverse(const node *p);
    void _inordertraverse(const node*p);
    void _posttraverse(const node*p);
public:
    binarytree();
    void pretraverse();
    void inordertraverse();
    void posttraverse();
    ~binarytree();
};

binarytree::binarytree()
{
   creat(head);
}

void binarytree::destroy(node *p)
{
    if(p)
    {
destroy(p->lchild);
destroy(p->rchild);
delete p;
    }
}

void binarytree::_pretraverse(const node *p)
{
    if(p)
    {
cout<data<<" ";
_pretraverse(p->lchild);
_pretraverse(p->rchild);
    }
}

void binarytree::_inordertraverse(const node*p)
{
    if(p)
    {
_inordertraverse(p->lchild);
cout<data<<" ";
_inordertraverse(p->rchild);
    }
}

void binarytree::_posttraverse(const node*p)
{
    if(p)
    {
_posttraverse(p->lchild);
_posttraverse(p->rchild);
cout<data<<" ";
    }
}

void binarytree::creat(node *&p)
{
    int n=0;
    cin>>n;
    if(!n)
    {
p=NULL;
    }
    else
    {
p=new node;
p->data=n;
creat(p->lchild);
creat(p->rchild);
    }
}

void binarytree::pretraverse()
{
    cout<<"preorder traversal:\n";
    _pretraverse(head);
    cout<<"\n";
}

void binarytree::inordertraverse()
{
    cout<<"in order traversal:\n";
    _inordertraverse(head);
    cout<<"\n";
}

void binarytree::posttraverse()
{
    cout<<"post order traversal:\n";
    _posttraverse(head);
    cout<<"\n";
}

binarytree::~binarytree()
{
    destroy(head);
}

int main()
{
    binarytree b1;
    b1.pretraverse();
    b1.inordertraverse();
    b1.posttraverse();
    return 0;
}




如有问题,可继续追问