导航:首页 > 数据处理 > 二叉树怎么输入数据

二叉树怎么输入数据

发布时间:2022-04-01 07:12:06

1. 怎样从键盘输入二叉树各结点建树,并进行层次和先序,输出结果.

从键盘输入二叉树各结点建树(空输入*):
BTNode * CreatBT()
{ BTNode *t;
char c;
scanf("%c",&c);
if(c=='*') return NULL;
{ t=(BTNode )malloc(sizeof(BTNode));
t->data=c;
t->lchild=CreatBT();
t->rchild=CreatBT();
return t;
}
/*先序递归遍历*/
void DLR(BTNode *bt)
{ if(bt)
{ printf("%c",bt->data);
DLR(bt->lchild);
DLR(bt->rchild);
}
}
/*层次遍历二叉树bt*/
void LevelOrder(BTNode *bt)
{ BTNode* queue[MAXSIZE];
int front,rear;
if (bt==NULL) return;
front=0; /*非循环队列*/
rear=0;
queue[rear++]=bt;
while(front!=rear)
{printf("%c",queue[front]->data); /*访问队首结点的数据域*/
if(queue[front]->lchild!=NULL) /*将队首结点的左孩子入队*/
{ queue[rear]=queue[front]->lchild;rear++;}
if(queue[front]->rchild!=NULL) /*将队首结点的右孩子入队列*/
{ queue[rear]=queue[front]->rchild; rear++; }
front++;
} /* while */
}/* LevelOrder*/

2. 建立一棵二叉树,数据以字符串形式从键盘输入。

代码如下:

char a[105];

int len,i;//i逐渐增加

void build(int s){

if(i==len) return;//已经建完树了

char c=a[i];//当前的字符

i++;

if(!tree[s].l) tree[s].l=c;//如果树的左边是空的,就给左边赋值

else tree[s].r=c;//反之

if(c!=' ') build(c);

if(c!=' ') build(c);//再来递归两下

}


(2)二叉树怎么输入数据扩展阅读

树的定义还需要强调以下两点:

1)n>0时根结点是唯一的,不可能存在多个根结点,数据结构中的树只能有一个根结点。

2)m>0时,子树的个数没有限制,但它们一定是互不相交的。

由树的定义可以看出,树的定义使用了递归的方式。递归在树的学习过程中起着重要作用。

结点拥有的子树数目称为结点的度。结点子树的根结点为该结点的孩子结点。相应该结点称为孩子结点的双亲结点。从根开始定义起,根为第一层,根的孩子为第二层,以此类推。树中结点的最大层次数称为树的深度或高度。
二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。

由二叉树定义以及图示分析得出二叉树有以下特点:

1)每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点

2)左子树和右子树是有顺序的,次序不能任意颠倒。

3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。

3. 数据结构(C语言版) 建立二叉树数据怎么输入

typedef struct BiTNode{ ............} BiTNode,*BiTree;BiTree CreateBiTree(){ BiTree T;char ch;scanf("%c",&ch);if(ch==' ')return (NULL); else{ if(!(T=( BiTNode*)malloc(sizeof(BiTNode))))return 0; T->data=ch; //生成根结点 T->lchild= CreateBiTree(); //构造左子树 T->rchild=CreateBiTree(); //构造右子树。因为前面定义具有BiTNode相同类型的二叉树,所以把递归的值付给右孩子 return (T); }}

4. 创建二叉树是怎么输入

void CreateTree(BTree *T)
{
char c;
c=getchar();
getchar();//<------------------here
if (c=='#')
(*T)=NULL;
else
{
(*T)=(BTree)malloc(LEN_T);

CreateTree(&(*T)->lchild);
(*T)->data=c;
CreateTree(&(*T)->rchild);
}
}

输入为(只是一个例子)
先序输入二叉树:
a
b
#
C
#
#
#
先序遍历:
a b C
先序遍历(非递归):
a b C
中序遍历:
b C a
中序遍历(非递归):
b C a
后序遍历:
C b a
后序遍历(非递归):
C b a
层次遍历(链式):
a b C
层次遍历(顺序):
a b CPress any key to continue

5. 二叉树创建问题,怎么实现输入多组数据

#include<stdio.h>
#include<stdlib.h>
typedef struct BiTreeNode{
int data;
struct BiTreeNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
void print2 ( BiTree T )
{
if ( T )
{
print2 ( T->lchild ) ;
printf ( "%c" , T->data ) ;
print2 ( T->rchild ) ;
}

// printf ( "\n" ) ;
}
void print3 ( BiTree T )
{
if ( T )
{
print3 ( T->lchild ) ;

print3 ( T->rchild ) ;
printf ( "%c" , T->data ) ;
}

// printf ( "\n" ) ;
}

int countleaf(BiTree T)
{
if(T == NULL)
return 0;
else
if(T->lchild == NULL && T->rchild == NULL)
return 1;

return(countleaf(T->lchild) + countleaf(T->rchild));
}

int btdepth(BiTree T)
{
int leftdep, rightdep;
if(T == NULL)
return 0;
else
{
leftdep = btdepth(T->lchild);
rightdep = btdepth(T->rchild);
if(leftdep > rightdep)
return leftdep + 1;
else
return rightdep + 1;
}
}

int main()
{
BiTree CreateBiTree();
void previsit(BiTree T);
while (1)
{
BiTree BT=CreateBiTree();
puts("OK@!");

previsit(BT);//先序遍历
printf ( "\n" ) ;
print2 ( BT ) ;//中序遍历
printf ( "\n" ) ;
print3 ( BT ) ;//后序遍历
putchar('\n');

printf ( "%d\n" , countleaf(BT)) ;
printf ( "%d\n" , btdepth(BT)) ;

}
return 0;

}

//BiTNode *lchilde ,*rchilde;
BiTree CreateBiTree(){
//按先后顺序输入儿茶书中的节点值,*字符表示空 输入时按层次遍历输入
//构造二叉链表示的二叉树
char ch;
BiTree T;
scanf("%c",&ch);
if(ch=='$')
T=NULL;

else
{
T=(BiTNode*)malloc(sizeof(BiTNode));
if(!T)
return(0);
T->data=ch; //生成根节点
T->lchild=CreateBiTree(); //构造左子树
T->rchild=CreateBiTree(); //构造右子树
}
return T;
} //CreatBiTree

void previsit(BiTree T)
{
//采用二叉树链表存储结构,visit 是对数据结构表元素操作的应用函数。
if(T)
{
printf("%c",T->data);
previsit(T->lchild);
previsit(T->rchild);
}

// printf ( "\n" ) ;

}

6. 怎么输入一个二叉树,树中每个节点存放了一个整数值

先定义二叉树的存储结构,不同的定义方法相应有不同的存储结构的建立算法。
如二叉树采用二叉链表存储结构,如下:
#define OK 1
#define OVERFLOW -1

typedef int TElemType;
typedef int Status;

typedef struct BiTNode {
TElemType data;
struct BiTNode *lchild ;//左孩子指针
struct BiTNode *rchild; // 右孩子指针
} BiTNode;//二叉树结点
typedef BiTNode *BiTree; //二叉树

int ch;

按给定的带 0 标记的先序序列定义一棵二叉树,如下:
Status CreateBiTree(BiTree &T)
{//按先序序列建儿叉树
scanf("%d",&ch);
if (ch= =0 ) T = NULL;
else {
if (!(T = (BiTNode *)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T->data = ch; // 生成根结点
CreateBiTree(T->lchild); // 构造左子树
CreateBiTree(T->rchild); // 构造右子树
}
return OK;
} // CreateBiTree
例如,输入先序序列如下:1 2 0 3 0 0 4 0 0
建立的二叉树如下:
1
/ \
2 4
\
3

7. 数据结构C语言版 二叉树构造算法实验 在键盘上怎么输入

同学你好:我帮你看了你的程序:这是修改了的程序:希望你能采纳:

这是实验结果:是正确的



#include"stdio.h"

#include"stdlib.h"

#defineOK1

#defineERROR0

#defineOVERFLOW-2


typedefcharTElemType;

typedefintStatus;

typedefstructBiTNode{//结点结构

TElemType data;

structBiTNode *lchild,*rchild;

//左右孩子指针

}BiTNode,*BiTree;


//以下是建立二叉树存储结构

StatusCreateBiTree(BiTree&T){

//请将该算法补充完整,参见第6章课件算法或课本

charch;

scanf("%c",&ch);

if(ch=='#')T=NULL;

else{

if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))

exit(OVERFLOW);

T->data=ch;

CreateBiTree(T->lchild);

CreateBiTree(T->rchild);

}

returnOK;


}//CreateBiTree

voidPreorder(BiTreeT)

{

if(NULL==T)

{

return;

}

else

{

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

Preorder(T->lchild);

Preorder(T->rchild);

}

}


voidInorder(BiTreeT)

{//中序遍历二叉树

//请将该算法补充完整,参见第6章课件算法

if(T)

{

Inorder(T->lchild);

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

Inorder(T->rchild);

}

}

voidPostorder(BiTreeT)

{//后序遍历二叉树

//请将该算法补充完整,参见第6章课件算法

if(T)

{

Postorder(T->lchild);

Postorder(T->rchild);

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

}

}


//以下是求叶子结点数

voidCountLeaf(BiTreeT,int&count){

//请将该算法补充完整,参见第6章课件算法

if(T){

if((!T->lchild)&&(!T->rchild))

count++;

CountLeaf(T->lchild,count);

CountLeaf(T->rchild,count);

}

}


//以下是求二叉树的深度

intDepth(BiTreeT){

//请将该算法补充完整,参见第6章课件算法

intdepthval,depthLeft,depthRight;

if(!T) depthval=0;

else{

depthLeft=Depth(T->lchild);

depthRight=Depth(T->rchild);

if(depthLeft>depthRight)depthval=1+depthLeft;

elsedepthval=1+depthRight;

}

returndepthval;

}


voidmain(){

BiTreeT;

ints=0,d;

printf(" creatofthebitree: ");

CreateBiTree(T);

printf(" outputresultofPreorder: ");

Preorder(T);

printf(" ");

printf(" outputresultofInorder: ");

Inorder(T);

printf(" ");

printf(" outputresultofPostorder: ");

Postorder(T);

printf(" ");

CountLeaf(T,s);

d=Depth(T);

printf(" leaves=%d ",s);

printf(" depth=%d ",d);

}

8. 数据结构的二叉树中,怎么输入字符序列,建立二叉链表

#include <stdio.h>
#include <stdlib.h>

#define OVERFLOW -1
#define OK 1
#define ERROR 0

typedef int Status;
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild;//左孩子指针
struct BiTNode *rchild;// 右孩子指针
}BiTNode;
typedef BiTNode *BiTree;

Status CreateBiTree(BiTree &T)
{//按给定的带空指针标记的先序序列建二叉链表
char ch;
ch=getchar();
if (ch==' ') T = NULL;
else {
if (!(T = (BiTNode *)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T->data = ch; // 生成根结点
CreateBiTree(T->lchild); // 构造左子树
CreateBiTree(T->rchild); // 构造右子树
}
return OK;
} // CreateBiTree

void Display(TElemType& e)
{
printf("%c\t",e);
}

void InOrderTraverse (BiTree T, void( *visit)(TElemType& e))
{ // 先序遍历二叉树
if (T==NULL) return;
InOrderTraverse(T->lchild, visit); // 遍历左子树
visit(T->data); // 访问根结点
InOrderTraverse(T->rchild, visit); // 遍历右子树
}

void main()
{
BiTree R;
printf("输入带空指针标记的先序序列:(例如AB C D )\n");
CreateBiTree(R);
printf("该二叉树的中序序列为:\n");
InOrderTraverse(R,Display);
printf("\n");
}

9. 二叉树输入

因为在这个程序的实现逻辑里#输入表示当前结点为空,叶子结点的意思是其左右子树都为空的结点,所以你需要针对叶子结点的左右子树输入#表示其左右子树的根结点都为空。

10. 关于二叉树的输入

void CreateBiTree(BiTree **T)//树的初始化
{
char ch;
ch=getchar();
if(ch=='# ') *T=NULL;
else
{
if(!(*T=(BiTNode *)malloc(sizeof(BiTNode)))) exit(error);
(*T) ->data=ch;
CreateBiTree((*T)->lchild);
CreateBiTree((*T)->rchild);
}
} //按一个先序二叉树输入,空树输入#

阅读全文

与二叉树怎么输入数据相关的资料

热点内容
浙江经贸职业技术学校怎么招生 浏览:10
东方财富如何看交易手续费 浏览:365
如何建立db2数据库 浏览:282
开放马路市场影响什么 浏览:416
数控车床车蜗杆怎么编程序 浏览:560
昆明二手装载机市场在哪里 浏览:443
明日之后枪口为什么不可交易 浏览:459
品种推向市场前期要做哪些事情 浏览:583
做微商卖什么产品畅销 浏览:864
在广州市哪个市场可以买到鹅蛋 浏览:660
咕咚为什么数据异常 浏览:90
华为怎么切换卡2数据流量 浏览:432
什么产品节约用电 浏览:674
本人提供技术和场地怎么入股 浏览:199
如何理解各种平台数据 浏览:488
如何不接收抖音的好友信息 浏览:639
专业的运营代理怎么选 浏览:813
瓜子二手车交易市场有哪些 浏览:994
泸水墙坝菜市场在哪里 浏览:356
销售什么产品来钱快 浏览:339