導航:首頁 > 源碼編譯 > 二叉樹的演算法和建立

二叉樹的演算法和建立

發布時間:2022-06-04 02:09:08

『壹』 怎麼樣創建二叉樹呢

1.建立二叉樹
2.為了直觀的輸出樹,那麼可以選擇廣度遍歷。查查書應該有。
3.深度的話我這剛好有兩個函數
#include <stdlib.h>
typedef struct{
char data;
}TElemType;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode, *BiTree;
void CreateBiTree(BiTree &T)
{
char ch;
TElemType elem;
printf("請輸入樹節點, 空樹以#代替:");
scanf("\n%c", &ch);
elem.data = ch;
if(ch == '#')
{
T = NULL;
}
else
{
T = (BiTNode * )malloc(sizeof(BiTNode));
if(!T) exit(-1);
T->data = elem; //生成根
CreateBiTree(T->lchild);//構造左子樹
CreateBiTree(T->rchild);// 構造右子樹
}
}
void main()
{
BiTree T;
CreateBiTree(T);
}

『貳』 二叉樹的創建和遍歷

我寫了一個二叉樹 你給看看 一定能行的 我自己用了
#include "stdio.h"
#include "malloc.h"
#include "string.h"
#include "stdlib.h"
#define Max 20 //結點的最大個數
typedef struct BinTNode{
char data;
struct BinTNode *lchild,*rchild;
}BinTNode,*BinTree; //自定義二叉樹的結點類型
//定義二叉樹的指針
int NodeNum,leaf; //NodeNum為結點數,leaf為葉子數

//==========以廣義表顯示二叉樹==============
void DisTree(BinTree T)
{
if(T)
{
printf("%c",T->data);
if((T->lchild)||(T->rchild))
{
if(T->lchild)
{
printf("%c",'(');
DisTree(T->lchild);
}
if(T->rchild)
{
printf("%c",',');
DisTree(T->rchild);
printf("%c",')');
}
}
}
}
//==========基於先序遍歷演算法創建二叉樹==============
//=====要求輸入先序序列,其中加入虛結點"#"以示空指針的位置==========
BinTree CreatBinTree(BinTree T)
{
char ch;
ch=getchar();
if(ch=='#')
T=NULL;
else
{
if(!(T=(BinTNode *)malloc(sizeof(BinTNode))))
printf("Error!");
T->data=ch;
T->lchild=CreatBinTree(T->lchild);
T->rchild=CreatBinTree(T->rchild);
}
return T;
}
//========NLR 先序遍歷=============
void Preorder(BinTree T)
{
if(T)
{
printf("%c",T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}
//========LNR 中序遍歷===============
void Inorder(BinTree T)
{
if(T){
Inorder(T->lchild);
printf("%c",T->data);
Inorder(T->rchild);
}
}
//==========LRN 後序遍歷============
void Postorder(BinTree T)
{
if(T){
Postorder(T->lchild);
Postorder(T->rchild);
printf("%c",T->data);
}
}
//=====採用後序遍歷求二叉樹的深度、結點數及葉子數的遞歸演算法========
int TreeDepth(BinTree T)
{
int hl,hr,max;
if(T){
hl=TreeDepth(T->lchild); //求左深度
hr=TreeDepth(T->rchild); //求右深度
max=hl>hr? hl:hr; //取左右深度的最大值
NodeNum=NodeNum+1; //求結點數
if(hl==0&&hr==0)
leaf=leaf+1; //若左右深度為0,即為葉子。
return(max+1);
}
else return(0);
}
//====利用"先進先出"(FIFO)隊列,按層次遍歷二叉樹==========
void Levelorder(BinTree T)
{
int front=0,rear=1;
BinTNode *cq[Max],*p; //定義結點的指針數組cq
cq[1]=T; //根入隊
while(front!=rear)
{
front=(front+1)%NodeNum;
p=cq[front]; //出隊
printf("%c",p->data); //出隊,輸出結點的值
if(p->lchild!=NULL){
rear=(rear+1)%NodeNum;
cq[rear]=p->lchild; //左子樹入隊
}
if(p->rchild!=NULL){
rear=(rear+1)%NodeNum;
cq[rear]=p->rchild; //右子樹入隊
}
}
}
//==========主函數=================
void main()
{
BinTree T,root;
int i,depth;
printf("\n");
printf("輸入完全二叉樹的先序序列:"); //輸入完全二叉樹的先序序列,
// 用#代表虛結點,如ABD###CE##F##
root=CreatBinTree(T); //創建二叉樹,返回根結點
DisTree(root);
printf("\n");
do //從菜單中選擇遍歷方式,輸入序號。
{
printf("\t********** 菜單 ************\n");
printf("\n");
printf("\t1: 先序遍歷\n");
printf("\t2: 中序遍歷\n");
printf("\t3: 後序遍歷\n");
printf("\t4: 該樹的深度,結點數,葉子數\n");
printf("\t5: 層次遍歷\n"); //按層次遍歷之前,先選擇4,求出該樹的結點數。
printf("\t0: 退出\n");
printf("\t*******************************\n");
scanf("%d",&i);
//輸入菜單序號(0-5)
switch(i)
{
case 1: {printf("Print Bin_tree Preorder: ");
Preorder(root); //先序遍歷
}break;
case 2: {printf("Print Bin_Tree Inorder: ");
Inorder(root); //中序遍歷
}break;
case 3: {printf("Print Bin_Tree Postorder: ");
Postorder(root); //後序遍歷
}break;
case 4: {depth=TreeDepth(root); //求樹的深度及葉子數
printf("樹深=%d 樹總結點數=%d",depth,NodeNum);
printf(" 樹葉子數=%d",leaf);
}break;
case 5: {printf("LevePrint Bin_Tree: ");
Levelorder(root); //按層次遍歷
}break;
default: exit(1);
}
}while(i>=0&&i<6);
}

兄弟你看看 不懂再往下留言 記得給我的勞動成果一點點獎勵哦!!

『叄』 建立二叉樹的遞歸演算法怎樣理解

不斷地在紙上或腦子里執行每一步,在一點要深刻理解函數的調用和形參和實參的概念,還有return語句。熟能生巧一位牛人說的.

『肆』 建立二叉樹的二叉鏈表演算法

為什麼要加*是因為,要通過參數,帶回生成的樹,而樹本身是指針,在C要通過指針才能帶回修改的信息,所以需再加個「*」,在輸入測試數據的時候,要對生成的樹,先擴充,所有的指針為空的結點,均指向值為#的結點,然後對這棵樹進行先根遍歷,將所得序列輸入測試就可以了

『伍』 怎樣理解遞歸建立二叉樹演算法

因為二叉樹的定義本來就是遞歸的,也就是說二叉樹的子樹也是一個二叉樹

『陸』 關於如何建立二叉樹

#define DATATYPE1 int
#define DATATYPE2 char
#define KEYTYPE int
#define MAXSIZE 100
#define MAXLEN 40
#define VEXTYPE int
#define ADJTYPE int

typedef struct
{ DATATYPE1 datas[MAXSIZE];
int last;
}SEQUENLIST;

typedef struct node
{
DATATYPE2 data;
struct node *next;
}LINKLIST;

typedef struct dnode
{DATATYPE2 data;<br/> struct dnode *prior, *next;<br/>} DLINKLIST;

typedef struct
{ DATATYPE1 data[MAXSIZE];
int top;
}SEQSTACK;

typedef struct snode
{ DATATYPE2 data;
struct snode *next;
}LINKSTACK;

typedef struct
{ DATATYPE1 data[MAXSIZE];
int front, rear;
}SEQQUEUE;

typedef struct qnode
{ DATATYPE1 data;
struct qnode *next;
}LINKQLIST;

typedef struct
{ LINKQLIST *front, *rear;
}LINKQUEUE;

typedef struct
{ char ch[MAXSIZE];
int len;
}SEQSTRING;

typedef struct
{ char *ch;
int len;
} HSTRING;

typedef struct
{ int i, j;
DATATYPE1 v;
}NODE;

typedef struct
{ int m, n, t;
NODE data[MAXLEN];
}SPMATRIX;

typedef struct
{ DATATYPE2 bt[MAXSIZE];
int btnum;
}BTSEQ;

typedef struct node1
{ DATATYPE2 data;
struct node1 *lchild, *rchild;
}BTCHINALR;

typedef struct node2
{ DATATYPE2 data;
struct node2 *lchild, *rchild, *parent;
}BTCHINALRP;

typedef struct
{ DATATYPE2 data;
int parent;
}PTNODE;

typedef struct
{ PTNODE nodes[MAXSIZE];
int nodenum;
}PTTREE;

typedef struct cnode
{ int child;
struct cnode *next;
}CHILDLINK;

typedef struct
{ DATATYPE2 data;
CHILDLINK *headptr;
}CTNODE;

typedef struct
{CTNODE nodes[MAXSIZE];<br/> int nodenum, rootset;<br/>}CTTREE;

typedef struct csnode
{ DATATYPE2 data;
struct csnode *firstchild, *nextsibling;
}CSNODE;

typedef struct
{ VEXTYPE vexs[MAXLEN];
ADJTYPE arcs[MAXLEN][MAXLEN];
int vexnum, arcnum;
int kind;
}MGRAPH;

typedef struct node3
{ int adjvex;
struct node3 *next;
}EDGENODE;

typedef struct
{ VEXTYPE vertex;
EDGENODE *link;
int id;
} VEXNODE;

typedef struct
{ VEXNODE adjlist[MAXLEN];
int vexnum, arcnum;
int kind;
}ADJGRAPH;

typedef struct
{ KEYTYPE key;
}SSELEMENT;

typedef struct
{ SSELEMENT r[MAXSIZE];
int len;
}SSTABLE;

typedef struct node4
{KEYTYPE key;<br/> struct node4 *lchild, *rchild;<br/>} BSTNODE;

typedef struct node5
{
KEYTYPE key;
struct node5 *next;
}CHAINHASH;

typedef struct
{
KEYTYPE key;
}HASHTABLE;

typedef struct
{ KEYTYPE key;
}RECNODE;

『柒』 數據結構-二叉樹的創建

#include <stdio.h>
#define ElemType char
//節點聲明,數據域、左孩子指針、右孩子指針
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//先序建立二叉樹
BiTree CreateBiTree(){
char ch;
BiTree T;
scanf('%c',&ch);
if(ch=='#')T=NULL;
else{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = ch;
T->lchild = CreateBiTree();
T->rchild = CreateBiTree();
}
return T;//返回根節點
}
//先序遍歷二叉樹
void PreOrderTraverse(BiTree T){
if(T){
printf('%c',T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
//中序遍歷
void InOrderTraverse(BiTree T){
if(T){
PreOrderTraverse(T->lchild);
printf('%c',T->data);
PreOrderTraverse(T->rchild);
}
}
//後序遍歷
void PostOrderTraverse(BiTree T){
if(T){
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
printf('%c',T->data);
}
}
void main(){
BiTree T;
T = CreateBiTree();//建立
PreOrderTraverse(T);//輸出
getch();
}

『捌』 二叉樹的重建演算法是什麼

太難了

閱讀全文

與二叉樹的演算法和建立相關的資料

熱點內容
su插件壓縮包怎麼安裝 瀏覽:546
我的世界神奇寶貝伺服器如何快速發育 瀏覽:662
信源編解碼作用 瀏覽:738
編譯腳本失敗 瀏覽:211
編譯無效對象是什麼意思 瀏覽:86
35歲開始做程序員 瀏覽:669
如何查看遠程伺服器系統時間 瀏覽:418
星三角怎麼編程 瀏覽:205
摩斯密碼加密題目 瀏覽:969
觸摸屏自鎖電路編程演示過程 瀏覽:332
程序員的奇妙之旅在線觀看 瀏覽:77
國內伺服器如何連接國外伺服器 瀏覽:453
加密文件怎麼變成不加密了 瀏覽:853
企業密信伺服器地址是什麼 瀏覽:407
note2android升級 瀏覽:839
麻省理工python 瀏覽:29
編譯程序軟體哪個好 瀏覽:847
rar命令行壓縮 瀏覽:938
單片機字元表代碼 瀏覽:504
pdf轉換word蘋果電腦 瀏覽:666