用C语言编程实现二叉树的中序遍历算法

1、采用二叉链表存储结构创建一个二叉树 2、用非递归方法实现二叉树的中序遍历算法3、输出二叉树中每个节点的值 4、给定具体数据调试程序

第1个回答  推荐于2016-01-03
#include<stdio.h>
#include<stdlib.h>
struct BiTNode *stack[100];
struct BiTNode//定义结构体
{
char data;
struct BiTNode *lchild,*rchild;
};
void later(struct BiTNode *&p) //前序创建树
{
char ch;
scanf("%c",&ch);
if(ch==' ')
p=NULL;
else
{
p=(struct BiTNode *)malloc(sizeof(struct BiTNode));
p->data=ch;
later(p->lchild);
later(p->rchild);
}
}
void print(struct BiTNode *p) //前序遍历(输出二叉树)
{
int i=-1;
while(1)
{
while(p!=NULL)
{
stack[++i]=p->rchild;/*printf("ok?\n");*/
printf("%c",p->data);
p=p->lchild;
}
if(i!=-1)
{
p=stack[i];
i--;
}
else
return;
}
}
void main()//主函数
{
struct BiTNode *p,*t;
later(p);
print(p);
}本回答被提问者采纳
第2个回答  2011-11-21
如果替你做作业,这道题做完,得花我一小时才行。
自已动动脑筋了,老师肯定讲过的,就是用堆栈实现,很简单。
但上课不听的话,肯定就做不出
第3个回答  2011-11-21
rq34

c语言 关于二叉树的创建和遍历(中序遍历)
void inorder(BiTNode *BT){\/\/中序遍历二叉树——递归形式 if(BT!=NULL){ inorder(BT->lchild );printf("%c ",BT->data);inorder(BT->rchild );} } void main(){ BiTNode *BT;printf("以广义表形式表示输入的二叉数 (如A(B(C,D),E(,F))的形式)\\n\\n");char string[Number]...

用C语言定义二叉树的二叉链表存储结构,完成二叉树的建立,先序中序后...
printf("input 根节点: ");create(&Tree);printf("先序遍历:");print1(Tree);printf("中序遍历");print2(Tree);printf("后序遍历");print3(Tree);printf("\\n深 度:%d \\n",depth(Tree));printf("总结点数:%d \\n",Cnode(Tree));printf("叶子结点数:%d\\n",leaf);} ...

c语言二叉树问题,勿写代码,求详细思考过程
中序遍历:若树不空,则先访问左子树,再访问根,再访问右子树。从后序遍历:CDABE得出E是最顶根节点。然后中序遍历:CADEB得出CAD是E的左子树中的,B是E的右子树中的。再分析后序遍历CDA可以知道A是CD的根,而中序是CAD得到C是A的左子树,D是A的右子树。(如下图)最后,先序遍历:若树不...

二叉树先序非递归遍历C语言算法
\/\/按先序次序输入二叉树中的结点的值(一个字符),空格字符表示空树, \/\/构造二叉链表表示二叉树 char ch; scanf("%c",&ch); if(ch=='#') *T=NULL; else{ *T=(bitree * )malloc(sizeof(bitree)); if(!*T) exit(1); (*T)->data=ch; \/\/生成根结点 CreateBiTree(&(*T)->lchild); \/\/...

C语言二叉树前,中,后遍厉序列有什么规律,就是已知俩个,如何推出第三个...
在上一次中序遍历中,root左侧是A、D、E、F,所以有4个节点位于root左侧。那么在前序遍历中,必然是第1个是G,第2到第5个由A、D、E、F过程,第6个就是root的右子树的根节点了,是M。第六步,观察发现,上面的过程是递归的。先找到当前树的根节点,然后划分为左子树,右子树,然后进入左子树...

跪求编程大神~用c语言编个程序
题目描述输入二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列。输入第一行输入二叉树的先序遍历序列;第二行输入二叉树的中序遍历序列。输出输出该二叉树的后序遍历序列。示例输入ABDCEFBDAECF示例输出DBEFCA include <iostream>#include <cstring>#define MAX 50+3using namespace std;...

...程序:从键盘输入某一二叉树前序遍历及中序遍历序列,构造二叉树并...
\/\/\/建立树\/\/\/ b_tree creat(int *date,int len){ b_tree root=NULL;int i;for(i=0;i<len;i++)root=insert(root,date[i]);return root;} \/\/\/中序打印\/\/\/ void print1(b_tree root){if(root!=NULL){ print1(root->left);printf("%d->",root->date);print1(root->right);...

用C语言实现二叉排序树排序,并按递减顺序打印各个数据
InsertBST(bt,A[i]); \/\/将关键字A[i]插入二叉排序树T中 i++;} return bt; \/\/返回建立的二叉排序树的根指针 } void DispInDescrease(BSTNode *bt){ \/\/按从小到大输出查找树中的内容,对该树中序遍历即可 if(bt){ DispInDescrease(bt->lchild);printf("%d\\t",bt->key);Di...

...并对得到的二叉排序述进行中序遍历,得到有序序列。
void inorder(BiTNode *BT){\/\/中序遍历二叉树 if(BT!=NULL){ inorder(BT->lchild );printf("%c ",BT->data);inorder(BT->rchild );} } void DeleteBtree(BiTNode *BT){\/\/删除二叉树的所有的节点 if(BT!=NULL){ DeleteBtree(BT->lchild );DeleteBtree(BT->rchild );free(BT);} }...

二叉树的建立与遍历(C语言)
){ char i;cout<<"请选择所需功能('A'输出该二叉树序列,'B'输出交换后二叉树序列)"<<endl;cin>>i;bitreptr p;cout<<"输入数据:";Create(p);switch(i){ case 'A':{ cout<<"前序:";preorder(p);cout<<endl;cout<<"中序:";midorder(p);cout<<endl;cout<<"后序:";...

相似回答