读书人

好手看看这个二叉树程序~

发布时间: 2012-10-19 16:53:36 作者: rapoo

高手看看这个二叉树程序~~~

C/C++ code
// 二叉树.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;#include<stdlib.h>#define NULL 0typedef struct tnode{    char data;    int ltag,rtag;    struct tnode *lchild,*rchild;}TBTree;//二叉树的创建TBTree *q;int createtree(TBTree *T){    char ch;    ch=getchar();    if(ch==' ')        T=NULL;    else    {        T=(TBTree *)malloc(sizeof(TBTree));            T->data=ch;        createtree(T->lchild);        createtree(T->rchild);    }    return 1;}//线索化二叉树void linktree(TBTree *T){    void inthread(TBTree *p);    TBTree *head;    head=(TBTree *)malloc(sizeof(TBTree));    head->rtag=1;    head->rchild=head;    head->ltag=0;    if(T==NULL)        head->lchild=head;    else    {        head->lchild=T;        q=head;        inthread(T);        q->rchild=head;        q->rtag=1;        head->rchild=q;    }}void inthread(TBTree *p){    if(p!=NULL)    {        inthread(p->lchild);        if(p->lchild==NULL)        {            p->ltag=1;            p->lchild=q;}        if(q->rchild==NULL)        {            q->rtag=1;            q->rchild=p;        }        q=p;        inthread(q->rchild);    }}//二叉树的遍历void midtree(TBTree *T){    TBTree *p;    p=T->lchild;    while(p!=T)    {        while(p->ltag==0)            p=p->lchild;        cout<<p->data<<" ";        while(p->rtag==1&&p->rchild!=T)        {            p=p->rchild;            cout<<p->lchild<<" ";}        p=p->rchild;    }}int _tmain(int argc, _TCHAR* argv[]){    TBTree *tree;    tree=NULL;    createtree(tree);    linktree(tree);    midtree(tree);    return 0;}

求大侠看看那里有问题~~~

[解决办法]
TBTree *tree;
tree=NULL;
createtree(tree);

----->
你现在createtree执行之后,tree的值应该没变,还是null吧。
这边要改变指针tree的值, createtree的参数必须是指针的指针**tree,才能返回函数中malloc的地址。

读书人网 >C++

热点推荐