高手看看这个二叉树程序~~~
- 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的地址。