您的位置:

二叉树的c语言程序求教,c语言创建二叉树代码

本文目录一览:

C语言 二叉树的建立

从键盘输入字符,然后回车,字符会停留在缓冲区内,之后你每次scanf("%c", ch)就会从缓冲区取出一个来

二叉树怎样用C语言实现

以下代码可实现二叉树的递归创建与中序遍历,但在输入时需在输入完有效数据后再连续输入多个负数才可以。

#include stdio.h

#include stdlib.h

typedef struct BitNode

{

int data;

struct BitNode *lchile,*rchild;

}*BiTree;

BiTree CreateBiTree(BiTree T)

{

int d;

scanf("%d",d);

if (d0)

return NULL;

else

{

if (!(T=(BiTree)malloc(sizeof(BiTree))))

{

exit(1);

}

T-data=d;//先根序创建二叉树

printf("%d ",T-data);

T-lchile=CreateBiTree(T-lchile);//创建左子树

T-rchild=CreateBiTree(T-rchild);//创建右子树

return T;

}

}

void InOrderView(BiTree T)//中序遍历二叉树

{

if(T)

{

InOrderView(T-lchile);

printf("%d ",T-data);

InOrderView(T-rchild);

}

}

void main()

{

BiTree T;

T=CreateBiTree(T);//递归创建二叉树

InOrderView(T);

}

完整正确的C语言二叉树程序

我有现成的,分享给大家了。

#includestdio.h

#includestdlib.h

#define maxsize 100

typedef struct btnode

{

int data ; //结点数据类型

struct btnode *lchild, *rchild; //定义左、右孩子为指针型

} bitree;

bitree *creat(bitree *t) //创建二叉树

{

bitree *s,*p,*q;

int x;

scanf("%d",x);

while(x!=0)

{

s= ( bitree *)malloc(sizeof(bitree));

s-data=x;

s-lchild=s-rchild=NULL;

if(t==NULL)

t=s;

else

{

p=t;

while(p)

{

q=p;

if(s-datap-data)

p=p-lchild;

else

p=p-rchild;

}

if(s-dataq-data)

q-lchild=s;

else

q-rchild=s;

}

scanf("%d",x);

}

return(t);

}

bitree *insert(bitree *t) //插入结点

{

bitree *s,*p,*q;

int x;

scanf("%d",x);

while(x!=0)

{

s= ( bitree *)malloc(sizeof(bitree));

s-data=x;

s-lchild=s-rchild=NULL;

if(t==NULL)

t=s;

else

{

p=t;

while(p)

{

q=p;

if(s-datap-data)

p=p-lchild;

else

p=p-rchild;

}

if(s-dataq-data)

q-lchild=s;

else

q-rchild=s;

}

scanf("%d",x);

}

return(t);

}

void search(bitree *t,int k) //查找数据

{

int flag=0;

while(t!=NULL)

{

if(t-data==k)

{

printf("已查到要找的数!\n");

flag=1;

break;

}

else

if(t-datak)

t=t-rchild;

else

t=t-lchild;

}

if(flag!=1)

printf("没有找到要查找的数据!\n");

}

bitree *dele(bitree *t,int k) //删除数据

{

int flag;

bitree *p,*q,*s=NULL,*f;

f=t;

while(t!=NULL) //查找数据

{

if(t-data==k)

{

printf("已找到所查找的数!\n");

break;

}

else

if(t-datak)

{

p=t;

t=t-rchild;

flag=0;

}

else

{

p=t;

t=t-lchild;

flag=1;

}

}

if(t-lchild==NULLt-rchild==NULL) //删除叶子结点

{

free(t);

if(flag==0)

p-rchild=NULL;

else

p-lchild=NULL;

}

else

{

if(t-lchild==NULLt-rchild!=NULL) //删除只有右子树的结点

{

if(flag==0)

p-rchild=t-rchild;

else

p-lchild=t-rchild;

free(t);

}

else

{

if(t-lchild!=NULLt-rchild==NULL) //删除只有左子树的结点

{

if(flag==0)

p-rchild=t-lchild;

else

p-lchild=t-lchild;

free(t);

}

else //删除左右子树都有的结点

{

p=t;

t=t-lchild;

q=t;

while(t-rchild)

{

q=t;

t=t-rchild;

}

if(t==q)

{

p-data=t-data;

p-lchild=t-lchild;

free(t);

}

else

{

p-data=t-data;

q-rchild=t-lchild;

free(t);

}

}

}

}

return(f);

}

void output(bitree * t) //实现二叉树的遍历

{

bitree *q[maxsize],*p;

int f,r;

q[0]=t;

f=r=0;

while (f=r)

{

p=q[f];

f++;

printf("%d ",p-data);

if(p -lchild!=NULL)

{

r++;

q[r]=p-lchild;

}

if (p-rchild!=NULL)

{

r++;

q[r]=p-rchild;

}

}

}

void main()

{

bitree *q=NULL,*r;

int m,n,x=1;

while(x==1)

{

system("cls");

printf(" ********************************\n");

printf(" 创建请按1\n");

printf(" 插入请按2\n");

printf(" 查找请按3\n");

printf(" 删除请按4\n");

printf(" 显示请按5\n");

printf(" 退出请按0\n");

printf(" ********************************\n");

scanf("%d",m);

switch(m)

{

case 1:printf("请输入数据并以'0'结束\n");

r=creat(q);system("pause");break;

case 2:printf("请输入数据并以'0'结束\n");

r=insert(r);break;

case 3:printf("请输入要查找的数:");

scanf("%d",n);

search(r,n);

system("pause");

break;

case 4:printf("请输入要删除的数:");

scanf("%d",n);

r=dele(r,n);

printf("已删除输入数据!\n");

system("pause");

break;

case 5:output(r);system("pause");printf("\n");

break;

case 0:x=0;break;

}

}

}

二叉树c语言实现

#includeiostream.h

#include stdio.h

#include stdlib.h

typedef struct node {

char data;

struct node *lchild,*rchild;//

}BiTNode,*BiTree;

void CreatBiTree(BiTree T)

{

char ch;

ch=getchar();

if (ch == ' ')

T = 0;

else {

T=(BiTNode*)malloc(sizeof(BiTNode));

T-data=ch;//生成根节点

CreatBiTree(T-lchild);//构造左子树

CreatBiTree(T-rchild);//构造右子树

}

}

void preorder(BiTree T)//前序遍历

{

if (T!=NULL){

printf ("%c",T-data);

preorder(T-lchild);

preorder(T-rchild);

}

}

void inorder(BiTree T)//中序遍历

{

if (T!=NULL){

inorder(T-lchild);

printf ("%c",T-data);

inorder(T-rchild);

}

}

void postorder(BiTree T)//后序遍历

{

if (T!=NULL){

postorder(T-lchild);

postorder(T-rchild);

printf ("%c",T-data);

}

}

void main ()

{

cout"请输入要创建的二叉树包括空格:"endl ;

BiTree T;

CreatBiTree(T);//创建二叉树

cout"前序遍历的结果为:"endl;

preorder(T);

coutendl;

cout"中序遍历的结果为:"endl;

inorder(T);

coutendl;

cout"后序遍历的结果为:"endl;

postorder(T);

}

数据结构二叉树的程序,用c语言怎么实现?

您好,想要实现一个二叉树,需要用到结构体来存储每个节点的信息,并使用指针来存储每个节点的左右子节点的地址。具体的实现方法可以参考下面的代码示例:

#include stdio.h

#include stdlib.h

struct TreeNode {

int val;

struct TreeNode *left;

struct TreeNode *right;

};

struct TreeNode* createNode(int val) {

struct TreeNode* node = (struct TreeNode*) malloc(sizeof(struct TreeNode));

node-val = val;

node-left = NULL;

node-right = NULL;

return node;

}

void insertNode(struct TreeNode* root, int val) {

if (root == NULL) {

return;

}

if (val root-val) {

if (root-left == NULL) {

root-left = createNode(val);

} else {

insertNode(root-left, val);

}

} else {

if (root-right == NULL) {

root-right = createNode(val);

} else {

insertNode(root-right, val);

}

}

}

void printTree(struct TreeNode* root) {

if (root == NULL) {

return;

}

printf("%d\n", root-val);

printTree(root-left);

printTree(root-right);

}

int main() {

struct TreeNode* root = createNode(5);

insertNode(root, 3);

insertNode(root, 2);

insertNode(root, 4);

insertNode(root, 7);

insertNode(root, 6);

insertNode(root, 8);

printTree(root);

return 0;

}

在这段代码中,我们定义了一个结构体 TreeNode 来表示二叉树的每个节点,结构体中包含了一个节点的数值 val,以及指向左子节点和右子节点的指针 left 和 right。

二叉树的C语言程序求教

typedef char DataType;//给char起个别名 DataType

//定义二叉树的数据结构

typedef struct node{

DataType data;//二叉树存储的数据

struct node *lchild, *rchild;//二叉树的左、右子树的指针

}BinTNode;

typedef BinTNode *BinTree ; //自定义一个数据类型(二叉树的指针类型)

#include stdio.h

#include malloc.h

//以前序遍历构建二叉树

void CreatBinTree(BinTree *T)

{

char ch;//定义临时变量ch,用来接受数据

if ((ch=getchar())==' ')

*T=NULL;//如果输入为空,则停止构建二叉树

else{*T=(BinTNode *)malloc(sizeof(BinTNode));//为二叉树分配内存空间

(*T)-data=ch;//把输入的数据存入二叉树

CreatBinTree((*T)-lchild);//构建左子树(递归)

CreatBinTree((*T)-rchild);//构建左子树(递归)

}

}

//求二叉树的结点数

int Node(BinTree T)

{ int static nodes=0;//定义一个变量存储二叉树的结点数

if(T)//如果二叉树不为空(是结点),执行此语句

{

Node(T-lchild);//看左子树是不是个结点(递归)

nodes++;//结点数加1

Node(T-rchild);//看右子树是不是个结点(递归)

}

return nodes;//返回结点数

}

//求二叉树的叶子数

int Leaf(BinTree T)

{ int static leaves=0;//定义一个变量存储二叉树的叶子数

if(T)//如果二叉树不为空,执行此语句

{

Leaf(T-lchild);//看左子树是不是叶子(递归)

if(!(T-lchild||T-rchild))//如果二叉树T的左、右结点都为空,则执行此语句(即是叶子)

leaves++;//叶子数加1

Leaf(T-rchild);//看右子树是不是叶子(递归)

}

return leaves;//返回叶子数

}

#include stdio.h

void main()

{ BinTree root;

CreatBinTree(root);//构建二叉树

int nodes=Node(root);//求此二叉树的结点数

int leaves=Leaf(root);//求此二叉树的叶子数

printf("\nnodes=%d leaves=%d",nodes,leaves);

}

上面是我的理解,好久没有写过代码了,如有错误,请指出。

二叉树的c语言程序求教,c语言创建二叉树代码

2023-01-06
c语言二叉排序,c语言创建排序二叉树

2022-12-02
c语言求二叉树最大深度,c语言求二叉树高度

2022-11-25
二叉树的前序遍历c语言,二叉树前序遍历c语言代码

2022-11-25
层次遍历构建二叉树c语言,c语言二叉树的创建与遍历

2023-01-06
c语言层序遍历创建二叉树,二叉树的建立与遍历完整代码C语言

2022-11-23
c语言八叉树,二叉树构造c语言实现

2022-11-26
输出二叉树的层次遍历c语言,遍历二叉树C语言

2023-01-04
c语言二叉树的度,c++二叉树的深度

2023-01-05
二叉树按层输出c语言,C语言二叉树怎么输入数据

2022-11-24
数据结构c语言二叉树的查找,数据结构c语言版二叉树代码

2022-11-22
判断两个二叉树是否相等c语言,判断两个二叉树是否相等c语言是

2022-11-24
c语言单链表以及二叉树中创建时,编写函数,输入字符序列,建立

2022-11-29
用c语言将二叉树转换为双向链表,二叉树转化为二叉链表

2022-11-29
c语言深度优先二叉树遍历,深度优先遍历类似于二叉树的层次遍历

本文目录一览: 1、急急急!求C语言的数据结构二叉树递归遍历程序! 2、C语言二叉树的遍历。 3、C语言数据结构“遍历二叉树” 4、二叉树的创建和遍历 急急急!求C语言的数据结构二叉树递归遍历程序!

2023-12-08
后序遍历二叉树的递归算法c语言,实现二叉树的后序遍历的非递归

2023-01-03
普通树的深度遍历c语言,树的层次遍历c语言

2023-01-04
如何在java中创建二叉排序树(java实现二叉排序树)

2022-11-12
二分法c语言,二分法c语言程序代码一元三次方程

2022-11-29
c语言排序树,c++排序库函数

2022-12-01