導航:首頁 > 數據處理 > 二叉樹怎麼輸入數據

二叉樹怎麼輸入數據

發布時間: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