问题描述
- @数据结构大神:递归实现二叉树遍历,图示行为什么错?
-
# include<stdio.h> # include<stdlib.h> # include<malloc.h> # define Max_Size 2 typedef struct Node{ int data; struct Node *Lchild; struct Node *Rchild; }BiTNode,*BiTree; int x,k=0,n=0; void CreateBiTree(BiTree T)//L是节点 { while(k!=Max_Size) { scanf("%d",&x);++k;//注意写法 if(!(T=(BiTree)malloc(sizeof(BiTree)))) exit(0);//已满,不能分配 else { T->data=x; CreateBiTree(T->Lchild); CreateBiTree(T->Rchild); } } } void Visit(BiTree T) { printf("%d,",x); } void PreOrder(BiTree T) { if(NULL!=T) { printf("%d ",T->data); PreOrder(T->Lchild); PreOrder(T->Rchild); } } /*int PreOrder(BiTree T.int (* Visit)(int e)) { int Print(int e) { printf("%d,",e); return 1; }//是否打印 if(T){ if(Visit(T->data)) if(PreOrder(T->Lchild.visit)) if(PreOrder(T->Lchild.visit)) return 1; return 0; } else return 1; }*/ void Leaf(BiTree T) { if(T!=NULL) { Leaf(T->Lchild); Leaf(T->Rchild); if((T->Lchild==NULL)&&(T->Rchild==NULL)) n++; } printf("the leafnumber is:%d",n); } BiTree Transform(BiTree T) { BiTree Temp; if(T!=NULL) { Transform(T->Lchild); Transform(T->Rchild); Temp=T->Lchild; T->Lchild=T->Rchild; T->Rchild=Temp; } return T; } int main(BiTree T) { CreateBiTree(T); PreOrder(T); Transform(T); Leaf(T); getch(); }
解决方案
T没有初始化
int main(BiTree T)
->
int main()
CreateBiTree(T);前面加上
BiTree T
void CreateBiTree(BiTree T)
->
void CreateBiTree(BiTree& T)
解决方案二:
数据结构----二叉树非递归实现
时间: 2024-12-04 13:58:30