首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
二叉树非递归遍历
时间:
2015-08-04 17:20:36
阅读:
83
评论:
0
收藏:
0
[点我收藏+]
标签:
//建议不会的 自己在纸上模拟一下 就会明白
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
typedef struct node
{
char x;
struct node *lchild;
struct node *rchild;
}*linklist,tree;
void chu(linklist *head)
{
(*head)=NULL;
}
void pretree(linklist *head)
{
char s;
scanf("%c",&s);
if(s==‘#‘) (*head)=NULL;
else
{
*head=(linklist)malloc(sizeof(tree));
(*head)->x=s;//根
pretree(&((*head)->lchild));//左孩子
pretree(&((*head)->rchild));//又孩子
}
}
void predg(linklist head)//先序递归
{
if(head)
{
printf("%c",head->x);
predg(head->lchild);
predg(head->rchild);
}
}
void prefdg(linklist head)//先序非递归
{
linklist stack[100];
int top;
tree *p;
top=0;
p=head;
while(p!=NULL||top>0)
{
while(p!=NULL)
{
printf("%c ",p->x);//根
stack[top]=p;
top++;
p=p->lchild;//左孩子
}
if(top>0)
{
top--;
p=stack[top];
p=p->rchild;//又孩子
}
}
}
void indg(linklist head)//中序递归
{
if(head)
{
indg(head->lchild);
printf("%c ",head->x);
indg(head->rchild);
}
}
void infdg(linklist head)//中序非递归
{
linklist stack[100];
int top=0;
linklist p;
p=head;
while(p!=NULL||top>0)
{
while(p!=NULL)
{
stack[top++]=p;
p=p->lchild;
}
if(top>0)
{
top--;
p=stack[top];
printf("%c ",p->x);
p=p->rchild;
}
}
}
void podg(linklist head)//后序递归
{
if(head)
{
podg(head->lchild);
podg(head->rchild);
printf("%c ",head->x);
}
}
void pofdg(linklist head)//后序非递归
{
linklist stack[100];
int top=0;
linklist p=head,q=NULL;
while(p!=NULL||top>0)
{
while(p!=NULL)
{
stack[top++]=p;
p=p->lchild;
}
if(top>0)
{
p=stack[top-1];
if(p->rchild==NULL||p->rchild==q)
{
printf("%c ",p->x);
q=p;
p=NULL;
top--;
}
else p=p->rchild;
}
}
}
int main()
{
linklist head;
chu(&head);
printf("请输入先序序列:\n");
pretree(&head);
printf("先序递归:\n");
predg(head);
printf("\n");
printf("先序非递归\n");
prefdg(head);
printf("\n");
printf("中序递归\n");
indg(head);
printf("\n");
printf("中序非递归\n");
infdg(head);
printf("\n");
printf("后序递归\n");
podg(head);
printf("\n");
printf("后序非递归\n");
pofdg(head);
printf("\n");
return 0;
}
//测试数据ABD#G##EH##I##CF#J###
版权声明:本文为博主原创文章,未经博主允许不得转载。
二叉树非递归遍历
标签:
原文地址:http://blog.csdn.net/yueloveme/article/details/47278387
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!