层次创建二叉树及后序遍历
来源:互联网 发布:js for each 编辑:程序博客网 时间:2024/05/17 00:49
#include<stdio.h>
typedef struct node{
char ch;
struct node *lchild;
struct node *rchild;
}*tree;
typedef struct snode
{tree *bt;
struct snode *next;
int flag;
}stack;
typedef struct qnode{
tree *bt;
struct qnode *next;
}queue;
tree *creat() /层次创建树
{tree *t ,*h,*root;
char c;
queue *front,*rear,*q;
h=(tree *)malloc(sizeof(tree));/创建队列的
h->ch='#'; 头节点
rear=(queue*)malloc(sizeof(queue));防止指针溢出
rear->bt=h;
front=q=rear;
root=(tree *)malloc(sizeof(tree)); /
scanf("%c",&c);
root->ch=c;
rear=(queue *)malloc(sizeof(queue));
rear->bt=root; /头节点入队列
q->next=rear;
q=rear;
while(front!=rear)
{front=front->next;
t=front->bt;/出队
scanf("%c",&c);
if(c=='0')t->lchild=NULL;
else{
t->lchild=(tree *)malloc(sizeof(tree));
t->lchild->ch=c;
rear=(queue *)malloc(sizeof(queue));
rear->bt=t->lchild;
q->next=rear;
q=rear;}
scanf("%c",&c);
if(c=='0')t->rchild=NULL;
else
{t->rchild=(tree*)malloc(sizeof(tree));
t->rchild->ch=c;
rear->bt=t->rchild;
q->next=rear;
q=rear;
}
}
return root;}
void inorder(tree *root) /后序遍历树
{stack *top=NULL,*s;
int f;
tree *p;
p=root;
if(root==NULL)return ;
while(p!=NULL||top!=NULl)
{if(p!=NULL)
{s=(stack *)malloc(sizeof(stack));
if(s==NULL)return;
s->bt=p;
s->flag=1;
s->next=top;
top=s;
p=p->lchild;
}
else{
s=top;
top=top->next;
p=s->bt;
f=s->flag;
if(f==1)
{s->next=top;/再入栈
top=s;
s->flag=2;
p=p->rchild;}
else
{printf("%3c",p->ch);
p=NULL;/防止进入死循环
free(s);/防止指针冲突
}
}
}
}
main()
{tree *root;
root=creat();
inorder(root);
}
- 层次创建二叉树及后序遍历
- 创建二叉树:层次遍历--树的宽度高度,后序遍历--祖先节点
- 初探二叉树之动态创建,前.中,后序遍历的递归及非递归实现,层次遍历,树状输出,叶节点及节点总数的统计
- 二叉树的先、中、后序遍历及层次遍历的迭代版算法
- 二叉树前、中、后及层次非递归遍历
- 二叉树的先序创建,先序,中序,后序的递归与非递归遍历,层次遍历,叶子结点数及树的深度
- 二叉树的后序遍历和层次遍历
- 二叉树的创建及先根中根后根按层次遍历
- 算法实验 二叉树的创建和前序-中序-后序-层次 遍历
- 二叉树的创建、二叉排序树、前序、中序、后序、层次遍历
- 二叉树:前序、中序、后序、层次遍历及实现
- 二叉树根据先序,中序创建二叉树,后序,中序创建二叉树,层次序列,中序遍历创建二叉树。
- 先序,中序,后序,层次遍历二叉树
- 由二叉树的后序和中序求层次遍历
- 二叉树2:层次遍历方式及先序、中序、后序(递归与非递归)遍历方式
- 数据结构--java实现二叉树的先序、中序、后序、层次遍历及根据先序中序建立二叉树
- 二叉树的先序遍历,后序遍历,中序遍历,层次遍历
- 二叉树--前序遍历、中序遍历、后序遍历、层次遍历
- 如何编写Linux设备驱动程序
- 2009长沙校园招聘信息
- 必须掌握的8个DOS命令(转)
- Linux 内存管理 -- 线性空间与物理内存
- system和undo表空间不能处于脱机
- 层次创建二叉树及后序遍历
- 装IBM226 8648机总结
- ubuntu下安装jdk
- 每个新手都要搞懂弄明白的
- static的简单理解
- 轻松玩转CreateRemoteThread,让你的代码长出翅膀
- IE与Firefox的区别
- 还是回这里吧
- CSS hacks