数据结构(C语言版)问题,求大神解答?

写出非递归中序遍历二叉树算法... 写出非递归中序遍历二叉树算法 展开
 我来答
一个疯子4444
2020-11-27 · TA获得超过323个赞
知道小有建树答主
回答量:619
采纳率:62%
帮助的人:163万
展开全部
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define TElemType int
int top=-1;
//top变量时刻表示栈顶元素所在位置
typedef struct BiTNode{
TElemType data;//数据域
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
//初始化树的函数
void CreateBiTree(BiTree *T){
*T=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->data=1;
(*T)->lchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->data=2;
(*T)->lchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->rchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->rchild->data=6;
(*T)->lchild->rchild->lchild=NULL;
(*T)->lchild->rchild->rchild=NULL;
(*T)->rchild->data=4;
(*T)->rchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild->lchild->data=7;
(*T)->rchild->lchild->lchild=NULL;
(*T)->rchild->lchild->rchild=NULL;
(*T)->rchild->rchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild->rchild->data=8;
(*T)->rchild->rchild->lchild=NULL;
(*T)->rchild->rchild->rchild=NULL;
(*T)->lchild->lchild->data=5;
(*T)->lchild->lchild->lchild=NULL;
(*T)->lchild->lchild->rchild=NULL;
}
//前序和中序遍历使用的进栈函数
void push(BiTNode** a,BiTNode* elem){
a[++top]=elem;
}
//弹栈函数
void pop( ){
if (top==-1) {
return ;
}
top--;
}

void displayElem(BiTNode* elem){
printf("%d ",elem->data);
}
//拿到栈顶元素
BiTNode* getTop(BiTNode**a){
return a[top];
}
//中序遍历非递归算法
void InOrderTraverse1(BiTree Tree){
BiTNode* a[20];//定义一个顺序栈
BiTNode * p;//临时指针
push(a, Tree);//根结点进栈
while (top!=-1) {//top!=-1说明栈内不为空,程序继续运行
while ((p=getTop(a)) &&p){//取栈顶元素,且不能为NULL
push(a, p->lchild);//将该结点的左孩子进栈,如果没有左孩子,NULL进栈
}
pop();//跳出循环,栈顶元素肯定为NULL,将NULL弹栈
if (top!=-1) {
p=getTop(a);
pop();
displayElem(p);
push(a, p->rchild);
}
}
}

int main(){
BiTree Tree;
CreateBiTree(&Tree);
printf("中序遍历算法: \n");
InOrderTraverse1(Tree);

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小黑哎啊
科技发烧友

2020-11-28 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:1642
采纳率:74%
帮助的人:346万
展开全部

#include<stdio.h>

#include<malloc.h>

typedef struct st{

char data;

struct st *r;

struct st *l;

}*link,ll;

char s[20]="ABC##DE##F##G##";//二叉树序列 

int i=0;

void create_tree(link &tree)//先序递归建树 

{

if(s[i]=='#') 

tree=NULL,i++;

else

{

tree=(link)malloc(sizeof(ll)); 

tree->data=s[i],i++;

create_tree(tree->l);

create_tree(tree->r);

}

}

void in_1(link tree)//递归中序遍历 

{

if(tree)

{

in_1(tree->l);

printf("%c ",tree->data);

in_1(tree->r);

}

}

void in_2(link tree)//非递归中序遍历 

{

    link s[20];//储存指针结点 

    int top =-1;

    link p = tree;

    while(p!=NULL||top!=-1){

        if(p!=NULL){

            s[++ top] = p;

            p = p->l;

        }else{

            p = s[top --];

printf("%c ",p->data); //出栈时,访问输出

            p = p->r;

        }

    }


}

int main()

{

link T=NULL; 

create_tree(T);//建树 

printf("递归中序遍历\n");

in_1(T);//递归中序遍历 

printf("\n非递归中序遍历\n");

in_2(T);//非递归中序遍历 

return 0;

}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式