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

本文目录一览:

请问如何用c语言实现二叉树的按层录入

#includestdio.h

#includestdlib.h

#includestring.h

#define MaxSize 1024

typedef struct node

{

char data;

struct node *lchild;

struct node *rchild;

}BTnode;

static char a[1024];

void create(BTnode *b,int m,int i)

{

if(ima[i]!=’ ‘)

{

b=(BTnode*)malloc(sizeof(BTnode));

b-data=a[i];

b-lchild=b-rchild=NULL;

create(b-lchild,m,2*i);

create(b-rchild,m,2*i+1);

}

}

void print(BTnode *b)

{

BTnode *p=b;

if(p!=NULL)

{

printf(“%c”,p-data);

if(p-lchild!=NULL||p-rchild!=NULL)

{

printf(“(“);

print(b-lchild);

if(p-rchild!=NULL)

{

printf(“,”);

print(b-rchild);

}

printf(“)”);

}

}

}

int main()

{

BTnode *b;

int j,m=1;

char s[1024],*p;

printf(“以字符串形式输入第一层节点(根节点):\n”);

gets(s);

while(strlen(s)!=0)

{

j=m;

p=s;

while(m2*j)

{

a[m]=*p;

p++;

m++;

}

printf(“以字符串形式输入下一层节点(空节点以空格表示):\n”);

gets(s);

}

create(b,m,1);

printf(“以二叉链表表示形式输出二叉树:\n”);

print(b);

printf(“\n\n”);

system(“pause”);

}

实现二叉树的层次遍历用c语言!不要c++

#includestdio.h

#includemalloc.h

//***********************************************************************

//定义二叉树

typedef struct tree{

char data;

struct tree *lchild,*rchild ;

}Tree,*Ptree;

//***********************************************************************

//定义队列

typedef struct queue_{

Ptree data[100];

int front,rear;

}Dqueue,*Pqueue;

//***********************************************************************

//建立二叉树 先根建立

Ptree CreateTree(Ptree N)

{

Ptree T=NULL ;

char c;

c = getchar();

if(c==’#’)

return NULL;

T = (Ptree)malloc(sizeof(tree));

T-data = c;

T-lchild=CreateTree(T);

T-rchild=CreateTree(T);

return T;

}

//删除二叉树

void DeleteTree(Ptree *T)

{

if(*T ==NULL)

return ;

if((*T)-lchild == NULL (*T)-rchild == NULL)

{

free(*T);

*T = NULL;

}

else

{

DeleteTree((*T)-lchild);

DeleteTree((*T)-rchild);

}

}

//***********************************************************************

//初始化队列

Pqueue initQueue()

{

Pqueue p;

p=(Pqueue)malloc(sizeof(Dqueue));

if(p)

{

p-front=0;

p-rear=0;

}

return p;

}

//***********************************************************************

//判断队列是否为空

int emptyQueue(Pqueue p)

{

if(p-front==p-rear)

return 1;

else

return 0;

}

//***********************************************************************

//入队

void inQueue(Pqueue p,Ptree t)

{

p-rear=(p-rear+1)%100;

p-data[p-rear]=t;

}

//***********************************************************************

//出队

void outQueue(Pqueue p,Ptree* t)

{

p-front=(p-front+1)%100;

*t=p-data[p-front];

}

//***********************************************************************

//层次遍历

void levelOrder(Ptree t)

{

Ptree p=t;

Pqueue Q=NULL;

if(p)

{

Q=initQueue();//初始化队列

printf(“%c”,p-data);

inQueue(Q,p);

while(!emptyQueue(Q))//当队列不为空

{

outQueue(Q,p);//出队

if(p-lchild)

{

printf(“%c”,p-lchild-data);

inQueue(Q,p-lchild);//进队

}

if(p-rchild)

{

printf(“%c”,p-rchild-data);

inQueue(Q,p-rchild);//进队

}

}

free(Q);

}

}

int main()

{

Ptree t;

printf(“先根建立二叉树:(结点值为字符,空结点以#表示)”);

t = CreateTree(NULL);

printf(“层遍历二叉树:\n”);

levelOrder(t);

DeleteTree(t);

return 0;

}

用c语言实现二叉树的程序,可以输入输出和遍历

#include stdio.h

#include stdlib.h

#include iostream.h

const int MaxLength=10;//结点个数不超过10个

typedef struct tree

{

char data;

struct tree *lchild,*rchild;

}tree;

//先序递归 建立二叉树

void Createbitree(tree* T)

{

char ch;

ch=getchar();

if(ch==’#’)

T=NULL;

else

{

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

T-data =ch;

Createbitree(T-lchild );

Createbitree(T-rchild );

}

}

//先序递归遍历

void PreOrderTraverse(tree* T)

{

if(T)

{

coutT-data;

PreOrderTraverse(T-lchild);

PreOrderTraverse(T-rchild);

}

}

//中序递归遍历

void InOrderTraverse(tree* T)

{

if(T)

{

InOrderTraverse(T-lchild);

coutT-data;

InOrderTraverse(T-rchild);

}

}

void PostOrderTraverse(tree* T)

{

if(T)

{

PostOrderTraverse(T-lchild);

PostOrderTraverse(T-rchild);

coutT-data;

}

}

//层序遍历

void LevelOrderTraverse(tree* T)

{

tree* Q[MaxLength];

int front=0,rear=0;

tree* p;

if(T)//根结点入队

{

Q[rear]=T;

rear=(rear+1)%MaxLength;

}

while(front!=rear)

{

p=Q[front]; //队头元素出队

front=(front+1)%MaxLength;

coutp-data;

if(p-lchild)//左孩子不为空,入队

{

Q[rear]=p-lchild;

rear=(rear+1)%MaxLength;

}

if(p-rchild)//右孩子不为空,入队

{

Q[rear]=p-rchild;

rear=(rear+1)%MaxLength;

}

}

}

//主函数

void main()

{

cout”请按先序次序输入二叉树的数据:”endl;

tree* T;

Createbitree(T);

cout”二叉树的先序序列为:”endl;

PreOrderTraverse(T);

coutendl”二叉树的中序序列为:”endl;

InOrderTraverse(T);

coutendl”二叉树的后序序列为:”endl;

PostOrderTraverse(T);

coutendl”二叉树的层序序列为:”endl;

LevelOrderTraverse(T);

coutendl;

}

比如 1

2 3

4 5 6 7

按先序输入是124##5##36##7##

用C语言编程 :建立三层二叉树,先根遍历输出,在线求高手

A

(B C)

(D E) (F G)

以这课树为例

#include stdio.h

#include stdlib.h

typedef char Elem;

typedef struct Node

{

Elem data;

struct Node *pLchild;

struct Node *pRchild;

}BTreeNode, *BTree;

BTree CreateBTree(BTree T, Elem *str)//创建二叉树

{

static int i = 0;

if (‘0’ == str[i])

{

T = NULL;

}

else

{

T = (BTree) malloc (sizeof(BTreeNode));

T-data = str[i++];

T-pLchild = CreateBTree(T-pLchild, str);

i++;

T-pRchild = CreateBTree(T-pRchild, str);

}

return T;

}

void PostTraverseBTree(BTree T)//后序

{

if (NULL != T)

{

PostTraverseBTree(T-pLchild);

PostTraverseBTree(T-pRchild);

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

}

}

void InTraverseBTree(BTree T)//中序

{

if (NULL != T)

{

InTraverseBTree(T-pLchild);

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

InTraverseBTree(T-pRchild);

}

}

void PreTraverseBTree(BTree T)//先序

{

if (NULL != T)

{

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

PreTraverseBTree(T-pLchild);

PreTraverseBTree(T-pRchild);

}

}

int main(void)

{

BTree T = NULL;

Elem str[] = “ABD00E00CF00G00”;

T = CreateBTree(T, str);

printf(“\n\n”);

printf(“先序遍历:\n”);

PreTraverseBTree(T);

printf(“\n\n”);

printf(“中序遍历:\n”);

InTraverseBTree(T);

printf(“\n\n”);

printf(“后序遍历:\n”);

PostTraverseBTree(T);

printf(“\n\n”);

}

c语言广义表形式输入二叉树,从下到上按层打印改树; 不知道哪错了,请各位大侠帮帮忙!

太长了 懒得看 给你看我的把

#include “stdio.h”

#include “malloc.h”

#define MaxSize 20

typedef struct tnode

{

int data;

struct tnode *lchild,*rchild;

}BTNode;

//建立二叉树运算算法

void CreatBTree(BTNode *bt,char *str)

{

BTNode *St[MaxSize],*p=NULL;

int top=-1,k,j=0;

char ch;

bt=NULL; //建立的二叉树初始化时为空

ch=str[0];

while(ch!=’\0′)

{

switch(ch)

{

case ‘(‘: top++;St[top]=p;k=1;break; //为左孩子结点

case ‘)’: top–;break;

case ‘,’: k=2;break; //为右孩子结点

default : p=(BTNode *)malloc(sizeof(BTNode));

p-data =ch;p-lchild =p-rchild =NULL;

if(bt==NULL) //p为二叉树的根结点

bt=p;

else //已建立二叉树根结点

{

switch(k)

{

case 1: St[top]-lchild =p;break;

case 2: St[top]-rchild =p;break;

}

}

}

j++;ch=str[j];

}

}

//求二叉树高度运算算法(递归法)

int BTHeight(BTNode *bt)

{

int lchilddep,rchilddep;

if(bt==NULL) //空树高度为0

return 0;

else

{

lchilddep=BTHeight(bt-lchild);//求左子树的高度

rchilddep=BTHeight(bt-rchild);//求右子树的高度

return (lchilddeprchilddep)?(lchilddep+1):(rchilddep+1);

}

}

//求二叉树结点个数运算算法(递归法)

int NodeCount(BTNode *bt)

{

int num1,num2;

if(bt==NULL) //空树结点个数为0

return 0;

else

{

num1=NodeCount(bt-lchild ); //求出左子树的结点树

num2=NodeCount(bt-rchild ); //求出右子树的结点树

return (num1+num2+1);

}

}

//求二叉树叶子结点个数运算算法(递归法)

int LeafCount(BTNode *bt)

{

int num1,num2;

if(bt==NULL)

return 0; //空树叶子结点个数为0

else if(bt-lchild ==NULLbt-rchild ==NULL)

return 1; //若为叶子结点返回1

else

{

num1=LeafCount(bt-lchild ); //求出左子树的叶子结点树

num2=LeafCount(bt-rchild ); //求出右子树的叶子结点树

return num1+num2;

}

}

//以括号表示法输出二叉树运算算法(递归法)

void DispBTree(BTNode *bt)

{

if(bt!=NULL)

{

printf(“%c”,bt-data);

if(bt-lchild !=NULL || bt-rchild!=NULL)

{

printf(“(“);

DispBTree(bt-lchild ); //以递归法处理左子树

if(bt-rchild !=NULL)

printf(“,”);

DispBTree(bt-rchild ); //以递归法处理右子树

printf(“)”);

}

}

}

//先序遍历

void PreOrder(BTNode *bt)

{

if(bt!=NULL)

{

printf(“%c”,bt-data );

PreOrder(bt-lchild );

PreOrder(bt-rchild );

}

}

//中序遍历

void InOrder(BTNode *bt)

{

if(bt!=NULL)

{

InOrder(bt-lchild );

printf(“%c”,bt-data );

InOrder(bt-rchild );

}

}

//后序遍历

void PostOrder(BTNode *bt)

{

if(bt!=NULL)

{

PostOrder(bt-lchild );

PostOrder(bt-rchild );

printf(“%c”,bt-data );

}

}

int main() //主函数

{

BTNode *bt;

CreatBTree(bt,”A(B(D,E(G,H),C(,F(I)))”);

printf(“二叉数bt以括号法显示为: “); DispBTree(bt);printf(“\n”);

printf(“先序发遍历二叉数bt为: “); PreOrder(bt); printf(“\n”);

printf(“中序发遍历二叉数bt为: “); InOrder(bt); printf(“\n”);

printf(“后序发遍历二叉数bt为: “); PostOrder(bt); printf(“\n”);

printf(“二叉数bt的高度为: %d\n”, BTHeight(bt));

printf(“二叉数bt的结点数为: %d\n”, NodeCount(bt));

printf(“二叉数bt的叶子结点数为: %d\n”, LeafCount(bt));

printf(“\n”);

return 0;

}

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
UOYXUOYX
上一篇 2024-10-04 00:16
下一篇 2024-10-04 00:16

相关推荐

  • Python读取CSV数据画散点图

    本文将从以下方面详细阐述Python读取CSV文件并画出散点图的方法: 一、CSV文件介绍 CSV(Comma-Separated Values)即逗号分隔值,是一种存储表格数据的…

    编程 2025-04-29
  • Python中读入csv文件数据的方法用法介绍

    csv是一种常见的数据格式,通常用于存储小型数据集。Python作为一种广泛流行的编程语言,内置了许多操作csv文件的库。本文将从多个方面详细介绍Python读入csv文件的方法。…

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

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

    编程 2025-04-29
  • 如何用Python统计列表中各数据的方差和标准差

    本文将从多个方面阐述如何使用Python统计列表中各数据的方差和标准差, 并给出详细的代码示例。 一、什么是方差和标准差 方差是衡量数据变异程度的统计指标,它是每个数据值和该数据值…

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

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

    编程 2025-04-29
  • Python多线程读取数据

    本文将详细介绍多线程读取数据在Python中的实现方法以及相关知识点。 一、线程和多线程 线程是操作系统调度的最小单位。单线程程序只有一个线程,按照程序从上到下的顺序逐行执行。而多…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • Python爬取公交数据

    本文将从以下几个方面详细阐述python爬取公交数据的方法: 一、准备工作 1、安装相关库 import requests from bs4 import BeautifulSou…

    编程 2025-04-29
  • Python两张表数据匹配

    本篇文章将详细阐述如何使用Python将两张表格中的数据匹配。以下是具体的解决方法。 一、数据匹配的概念 在生活和工作中,我们常常需要对多组数据进行比对和匹配。在数据量较小的情况下…

    编程 2025-04-29
  • Python数据标准差标准化

    本文将为大家详细讲述Python中的数据标准差标准化,以及涉及到的相关知识。 一、什么是数据标准差标准化 数据标准差标准化是数据处理中的一种方法,通过对数据进行标准差标准化可以将不…

    编程 2025-04-29

发表回复

登录后才能评论