快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

后序遍历二叉树c语言函数 后序遍历二叉树例题

C语言数据结构,急求在线二叉树先序中序后序递归遍历

#include

我们拥有十多年网页设计和网站建设经验,从网站策划到网站制作,我们的网页设计师为您提供的解决方案。为企业提供网站设计、成都网站设计、微信开发、微信小程序定制开发、成都手机网站制作H5网站设计、等业务。无论您有什么样的网站设计或者设计方案要求,我们都将富于创造性的提供专业设计服务并满足您的需求。

iostream.h

#include

stdio.h

#include

malloc.h

#define

MaxNode

100

typedef

char

DataType;

typedef

struct

node

{

DataType

data;

struct

node

*lchild;

struct

node

*rchild;

}BiTNode,BiTree;

void

CreateBiTree(BiTree

*bt)//建立一个二叉树

{

char

ch;

//ch=getchar();

scanf("%c",ch);

if

(ch=='

')

bt=NULL;

else{

bt=(BiTree*)malloc(sizeof(BiTNode));

bt-data=ch;

CreateBiTree(bt-lchild);

CreateBiTree(bt-rchild);

}

}

void

PreOrder(BiTree

*root)//前序遍历

{

if(root!=NULL)

{

Visit(root-data);

PreOrder(root-lchild);

PreOrder(root-rchild);

}

}

void

InOrder(BiTree

*root)//中序遍历

{

if(root!=NULL)

{

InOrder(root-lchild);

Visit(root-data);

InOrder(root-rchild);

}

}

void

LaOrder(BiTree

*root)//后序遍历

{

if(root!=NULL)

{

PreOrder(root-lchild);

PreOrder(root-rchild);

Visit(root-data);

}

}

void

main()

{

BiTree

*bt;

printf("请输入数据:\n");

bt=

NULL;

CreateBiTree(bt);

//and

here

printf("\n

结果如下:\n");

printf("先序遍历的结果为:\n");

PreOrder(bt);

printf("\n");

printf("中序遍历的结果为:\n");

InOrder(bt);

printf("\n");

printf("后序遍历的结果为:\n");

LaOrder(bt);

}

有个Visit()函数

你没写!!

我只是改了语法错误!!

只剩那一个函数没定义

你定义下就没语法错误了!

C语言根据层次遍历和中序遍历求二叉树的前序遍历和后序遍历。下面有我的建树函数,有注释的。

#include"cstdio"

#include"vector"

#include"cstring"

#include"algorithm"

using namespace std;

const int maxn =30;

struct node{

int data;

node* lchild;

node* rchild;

};

int n;

int in[maxn];

bool vis[maxn]={false};

vectorint lev;

node* create(vectorint lev,int inl,int inr){

if(lev.size()==0) return NULL;

if(inlinr) return NULL;

//printf("00\n");

node* root= new node;

root-data =lev[0];

int k;

for(k=inl;k=inr;k++){

if(lev[0]==in[k])

break;

}

for(int j=inl;j=k-1;j++)

vis[in[j]]=true;

vectorint tempLeft,tempRight;//要函数体内新建

for(int i=1;ilev.size();i++){

if(vis[lev[i]]==true)

tempLeft.push_back(lev[i]);

else

tempRight.push_back(lev[i]);

}

root-lchild =create(tempLeft,inl,k-1);

root-rchild =create(tempRight,k+1,inr);

return root;

}

void preorder(node* root){

if(root==NULL)

return;

printf("%d ",root-data);

preorder(root-lchild);

preorder(root-rchild);

}

int main(){

scanf("%d",n);

int x;

for(int i=0;in;i++){

scanf("%d",x);

lev.push_back(x);

}

for(int j=0;jn;j++)

scanf("%d",in[j]);

node *root =create(lev,0,n-1);

preorder(root);

return 0;

}

C语言二叉树遍历程序

先看下creat这个函数:

status creat(bitnode *t)/*先序建立二叉树*/

{

char ch;

ch=getch();putch(ch);

if(ch=='0') t=NULL;

else

{

t=(bitnode *)malloc(sizeof(bitnode));

if(!t)

exit(OVERFLOW);

t-data=ch;

creat(t-lchild);

creat(t-rchild);

}

return OK;

}

其中有句代码是t=(bitnode *)malloc(sizeof(bitnode));

这是给t赋值,由于t是参数,这样做是不能返回的。

我知道你的意思是想通过指针返回,但是那样的用法应该是对t所指向的变量赋值,也就是对*t赋值。

如果你还没理解的话看下函数里的递归调用:creat(t-lchild);调用函数后,本意是要给t-lchild赋值的,但是是做不到的,因为要改变一个变量的值的话,应该传的是它的地址。

可能你觉得有点乱了,我举个函数中用指针做参数来返回的例子:

假如要用指针返回一个整型的变量,那么指针应该是指向整型变量的,即int*

这里应该是要返回一个struct bitnode *类型的,也就是返回的值就是个指针,那么参数就应该是一个指向这种指针的指针,即struct bitnode **

可以这么修改:

status creat(bitnode **t) //多了个*

{

char ch;

ch=getch();putch(ch);

if(ch=='0') *t=NULL; //多了个*

else

{

*t=(bitnode *)malloc(sizeof(bitnode)); //多了个*

if(!*t) //多了个*

exit(OVERFLOW);

(*t)-data=ch;

creat((*t)-lchild); //注意不同

creat((*t)-rchild);

}

return OK;

}

主函数这么改

status main()

{

bitnode* t1; //多了个*

creat(t1);

pre(t1,print); //少了个

getch();

return 0;

}

另外一个编译错误就是

int pre(bitnode *t,status (*visit)())

指针函数后面应该带参数,改为

int pre(bitnode *t,status (*visit)(bitnode *))

c语言 二叉树先 中 后序遍历的函数体

void PreOrderTraverse(BiTree T) /*先序遍历*/

if(T!=NULL)

{

printf("%c ",T-data);

PreOrderTraverse(T-lchild);

PreOrderTraverse(T-rchild);

}

}

void InOrderTraverse(BiTree T)/*中序遍历*/

{

if(T!=NULL)

{

InOrderTraverse(T-lchild);

printf("%c ",T-data);

InOrderTraverse(T-rchild);

}

}

void PostOrderTraverse(BiTree T) /*后序遍历*/

{

if(T!=NULL)

{

PostOrderTraverse(T-lchild);

PostOrderTraverse(T-rchild);

printf("%c ",T-data);

}

}


当前文章:后序遍历二叉树c语言函数 后序遍历二叉树例题
地址分享:http://6mz.cn/article/ddshsss.html

其他资讯