二叉树的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);

}

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

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/249468.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2024-12-12 17:12
下一篇 2024-12-12 17:12

相关推荐

  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python字符串宽度不限制怎么打代码

    本文将为大家详细介绍Python字符串宽度不限制时如何打代码的几个方面。 一、保持代码风格的统一 在Python字符串宽度不限制的情况下,我们可以写出很长很长的一行代码。但是,为了…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • Python基础代码用法介绍

    本文将从多个方面对Python基础代码进行解析和详细阐述,力求让读者深刻理解Python基础代码。通过本文的学习,相信大家对Python的学习和应用会更加轻松和高效。 一、变量和数…

    编程 2025-04-29
  • Python程序文件的拓展

    Python是一门功能丰富、易于学习、可读性高的编程语言。Python程序文件通常以.py为文件拓展名,被广泛应用于各种领域,包括Web开发、机器学习、科学计算等。为了更好地发挥P…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • Python满天星代码:让编程变得更加简单

    本文将从多个方面详细阐述Python满天星代码,为大家介绍它的优点以及如何在编程中使用。无论是刚刚接触编程还是资深程序员,都能从中获得一定的收获。 一、简介 Python满天星代码…

    编程 2025-04-29
  • 仓库管理系统代码设计Python

    这篇文章将详细探讨如何设计一个基于Python的仓库管理系统。 一、基本需求 在着手设计之前,我们首先需要确定仓库管理系统的基本需求。 我们可以将需求分为以下几个方面: 1、库存管…

    编程 2025-04-29

发表回复

登录后才能评论