有谁有用C语言编辑的程序 是关于二叉树的建立,然后进行先序遍历、后序遍历、中序遍历。。急需 谢谢了。。

要是C语言编辑的,能调试通过,就是建立二叉树并依次访问每个结点一次。。。

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
node *left;
node *right;
}node;
node* CreateTree(node *root,int n)
{
if(root==NULL)
{
root=(node *)malloc(sizeof(node));
root->data=n;
root->left=NULL;
root->right=NULL;
return root;
}
else if(n>root->data)
{
root->right=CreateTree(root->right,n);
return root;
}
else if(n<root->data)
{
root->left=CreateTree(root->left,n);
return root;
}

}
void Print(node *root)
{
if(root!=NULL)
{
Print(root->left);
printf("%d ",root->data);
Print(root->right);
}
return;
}
bool search(node* root,int a)
{
node *p=root;
while(p!=NULL)
{
if(a==p->data)
return true;
else if(a>p->data)
p=p->right;
else if(a<p->data)
p=p->left;
}
return false;
}
void del(char *c)
{
int i,j=0,k=0;
bool b=true;
for(i=0;c[i]!='\0';++i)
{
b=true;
k=0;
while(k<j)
{
if(c[k]==c[i])
{
b=false;
break;
}
k++;
}
if(!b)
continue;
c[j]=c[i];
j++;
}
c[j]='\0';
}

int main()
{
char c[51];
int n,i,a,m;
bool b=false,b1=false;
node* root=NULL;
while(1)
{
printf("1.请输入长度不超过50的整数\n2.删除重复元素\n3.构建二叉排序树\n4.查找\n5.退出\n");
scanf("%d",&n);
getchar();
switch(n)
{
case 1:
{
scanf("%s",c);
printf("输入的整数为%s\n",c);
b=true;
break;
}
case 2:
{
if(!b)
printf("没有数据\n");
del(c);
printf("删除后的整数为%s\n",c);
break;
}
case 3:
{
if(!b)
printf("没有数据\n");
i=0;
while(c[i]!='\0')
{
a=c[i]-'0';
root=CreateTree(root,a);
i++;
}
printf("中序序列为:\n");
Print(root);
printf("\n");
break;
}
case 4:
{
if(!b)
printf("没有数据\n");
scanf("%d",&m);
if(search(root,m))
printf("成功\n");
else
printf("失败\n");
break;
}
case 5:
{
b1=true;
}

}
if(b1)
break;

}
return 0;
}追问

亲 这个程序是自己写的吗?有点问题 编译没问题 但是运行有问题,就是那些文字重复循环 有问题。。

追答

很早以前写的 有什么问题具体描述一下

追问

就是无休止的输入 没有输出 而且好像有多余的程序内容不知如何删减 只需要有二叉树建立并且遍历就行了

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-08
好久都不编程了,都忘记了。记得在学校的时候做过,感觉挺简单的!!

...完成二叉树的建立,先序中序后序遍历的操作,求所有叶子结点总数_百度...
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语言帮编一个关于家谱的程序!要求:
Status CreateBitree(BiTree &T);\/\/按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树。\/\/构造二叉链表表示的二叉树T.void PreOrder(BiTree T);\/\/采用二叉链表存储结构,先序遍历二叉树T,对每个结点的访问就是输出它的值 void Inorder(BiTree T);\/\/采用二叉链表存储结构,中...

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

...数据结构,二叉树的遍历,先序遍历,后序遍历,中序遍历,急急急急急...
前序遍历先访问根,所以C为根,在中序遍历中先访问左子树,再访问根,最后访问右子树,所以在中序序列中,C前面的为左子树,第二个访问的是左子树的根A以此类推可得这样的一棵二叉树:C \/ \\ A D \\ B 对这棵二叉树后序遍历可得后序序列为BADC ...

二叉树先序非递归遍历C语言算法
if((ht=createprebitree())!=NULL) \/\/非递归建立 \/\/CreateBiTree(&ht); \/\/if(ht!=NULL) \/\/递归建立 { printf("先序遍历输出二叉树:"); preordertraverse(ht); putchar('\\n'); printf("中序遍历输出二叉树:"); inordertraverse(ht); putchar('\\n'); printf("后序遍历输出二叉树:"); post...

...建立二叉树的存储结构,先序、中序、后序遍历二叉树(要求任选某一种...
后序遍历二叉树(要求任选某一种用非递归算法完成); 3、查询二叉树中指定结点;

写出二叉树的先序遍历、中序遍历、后序遍历。
1 确定根,确定左子树,确定右子树。2 在左子树中递归。3 在右子树中递归。4 打印当前根。那么,我们可以画出这个二叉树的形状:那么,根据后序的遍历规则,我们可以知道,后序遍历顺序为:AEFDHZMG 二叉树的一些介绍:在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左...

编写程序,用先序递归遍历法建立二叉树的二叉链表存储结构,输出其先序...
BiTNode *bulid() \/*建树*\/ { BiTNode *q;BiTNode *s[20];int i,j;char x;printf("请按顺序输入二叉树的结点以输入0和*号结束\\n");printf("请输入要输入的为第几个结点i=\\n");scanf("%d",&i);printf("请输入你要输入该结点的数为x=");getchar();scanf("%c",&x);while(i!=...

数据结构中关于用c++语言建立二叉树的问题,求代码,急!!!
程序如下:(1)include "bitree.h"void preOrder(BiTree root)\/*先序遍历二叉树, root为指向二叉树根结点的指针*\/ { if (root!=NULL){ printf("%c",root->data); \/*输出结点*\/ preOrder(root ->LChild);\/*先序遍历左子树*\/ preOrder(root ->RChild); \/*先序遍历右子树*\/ }...

一道数据结构关于二叉树的问题,求写出C语言代码
\/\/先序遍历二叉树 void PreOrderTraverse(BiTree T){ if(T){ printf("%c",T->data);PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);} } \/\/中序遍历 void InOrderTraverse(BiTree T){ if(T){ PreOrderTraverse(T->lchild);printf("%c",T->data);PreOrderTraverse(T->...

相似回答
大家正在搜