写出先序遍历的二叉树的遍历算法。
展开全部
递归方式:
#include<stdio.h>
typedef struct node{
char data;
struct node *lchild;
struct node *rchild;
}BitNode,*BitTree;
void Createtree(BitTree *bt){
char ch;
scanf("%c",&ch);
if(ch=='.') *bt=NULL;//如果输入元素为'.',表示空;
else
{
*bt=(BitNode *)malloc(sizeof(BitNode));
(*bt)->data=ch;
Createtree(&(*bt)->lchild);
Createtree(&(*bt)->rchild);
}
}
void Visit(char ch){
printf("%c",ch)
}
void Preorder(BitTree bt){ //线序遍历
if(bt)
{
Visit(bt->data);
Preorder(bt->lchild);
Preorder(bt->rchild);
}
}
void main()
{
BitTree bt;
Createtree(&bt);
printf("先序遍历:")
Preorder(bt);
}
#include<stdio.h>
typedef struct node{
char data;
struct node *lchild;
struct node *rchild;
}BitNode,*BitTree;
void Createtree(BitTree *bt){
char ch;
scanf("%c",&ch);
if(ch=='.') *bt=NULL;//如果输入元素为'.',表示空;
else
{
*bt=(BitNode *)malloc(sizeof(BitNode));
(*bt)->data=ch;
Createtree(&(*bt)->lchild);
Createtree(&(*bt)->rchild);
}
}
void Visit(char ch){
printf("%c",ch)
}
void Preorder(BitTree bt){ //线序遍历
if(bt)
{
Visit(bt->data);
Preorder(bt->lchild);
Preorder(bt->rchild);
}
}
void main()
{
BitTree bt;
Createtree(&bt);
printf("先序遍历:")
Preorder(bt);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <stdlib.h>
#define max 100
typedef char ch[10];
void fun(ch x,ch y){
if(*x){
ch x1,x2,y1,y2;
char *p,*q,*t; char r; int n=0;
r=*x; t=y; p=y1; q=y2;
while(*t!=r){
*(p++)=*(t++);
n++;
}
t++; *p='\0';
while(*t) *(q++)=*(t++);
*q='\0'; t=&x[1]; p=x1; q=x2;
for (int i=0;i<n;i++) *(p++)=*(t++); *p='\0';
while(*t) *(q++)=*(t++); *q='\0';
fun(x1,y1); fun(x2,y2);
printf("%c",r);
}
}
void f(){
ch x,y;
printf("input a tree preorder:\n"); gets(x);
printf("input a tree midoeder:\n"); gets(y);
printf("\n");
puts(x); puts(y);
fun(x,y);
printf("\n");
}
void main(){
printf("***********Bitree************\n");
int n=1;
while(n){
f();
printf("0:break 1 :continue\n");
printf("input your select :");
scanf("%d",&n); getchar();
}
}
#include <stdlib.h>
#define max 100
typedef char ch[10];
void fun(ch x,ch y){
if(*x){
ch x1,x2,y1,y2;
char *p,*q,*t; char r; int n=0;
r=*x; t=y; p=y1; q=y2;
while(*t!=r){
*(p++)=*(t++);
n++;
}
t++; *p='\0';
while(*t) *(q++)=*(t++);
*q='\0'; t=&x[1]; p=x1; q=x2;
for (int i=0;i<n;i++) *(p++)=*(t++); *p='\0';
while(*t) *(q++)=*(t++); *q='\0';
fun(x1,y1); fun(x2,y2);
printf("%c",r);
}
}
void f(){
ch x,y;
printf("input a tree preorder:\n"); gets(x);
printf("input a tree midoeder:\n"); gets(y);
printf("\n");
puts(x); puts(y);
fun(x,y);
printf("\n");
}
void main(){
printf("***********Bitree************\n");
int n=1;
while(n){
f();
printf("0:break 1 :continue\n");
printf("input your select :");
scanf("%d",&n); getchar();
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
procedure find ( r :node )
if ( r = nil) then exit;
out -> r
find ( r. left);
find( r. right);
伪代码.大概意思是递归调用来完成遍历.
if ( r = nil) then exit;
out -> r
find ( r. left);
find( r. right);
伪代码.大概意思是递归调用来完成遍历.
追问
不用伪代码,用C语言怎么编写?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要递归还是非递归?数据结构书上都有。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询