日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 递归创建线程,[linux]二叉树的建立及其递归遍历(C语言实现)

發布時間:2023/12/2 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 递归创建线程,[linux]二叉树的建立及其递归遍历(C语言实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#二叉樹的特點:

每一個節點最多有兩棵子樹,所以二叉樹中不存在度大于2的節點,注意,是最多有兩棵,沒有也是可以的 左子樹和右子樹是有順序的,次序不能顛倒,這點可以在哈夫曼編碼中體現, 順序不同編碼方式不同

-即使樹中某個節點中只有一個子樹的花,也要區分它是左子樹還是右子樹

二叉樹一般有五種形態 1.空二叉樹 2.只有一個根節點 3.根結點只有左子樹 4.根節點只有右子樹

#二叉樹的性質 1:在二叉樹的第i層上最多有2^i-1個節點 2:深度為K的二叉樹之多有2^k-1個節點

這里的深度K意思就是有K層的二叉樹 3:對于任何一棵二叉樹T,如果其終端節點有No個,度為2的節點數有N2,則No=N2+1 4: 具有n個節點的完全二叉樹的深度為[log2n]+1([x]表示不大于x的最大整數)

#1.二叉樹的存儲結構(二叉鏈表)

//二叉樹的存儲結構,一個數據域,2個指針域

typedef struct BiTNode

{

char data;

struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

#2.首先要建立一個二叉樹,建立二叉樹必須要了解二叉樹的遍歷方法。,我在這里展示的是二叉樹的遞歸建立方式

//我在這里實現的是,二叉樹的前序遍歷方式創建,如果要使用中序或者后序的方式建立二叉樹,只需將生成結點和構造左右子樹的順序改變即可

void CreateBiTree(BiTree *T)

{

char ch;

scanf("%c",&ch);

if(ch=='#')

*T=NULL;

else

{

*T=(BiTree )malloc(sizeof(BiTNode));

if(!*T)

exit(-1);

(*T)->data=ch;

CreateBiTree(&(*T)->lchild);

CreateBiTree(&(*T)->rchild);

}

}

#3.二叉樹的遍歷方式(遞歸建立)

void PreOrderTraverse(BiTree T)//二叉樹的先序遍歷

{

if(T==NULL)

return ;

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

PreOrderTraverse(T->lchild);

PreOrderTraverse(T->rchild);

}

void InOrderTraverse(BiTree T)//二叉樹的中序遍歷

{

if(T==NULL)

return ;

InOrderTraverse(T->lchild);

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

InOrderTraverse(T->rchild);

}

void PostOrderTraverse(BiTree T)//后序遍歷

{

if(T==NULL)

return;

PostOrderTraverse(T->lchild);

PostOrderTraverse(T->rchild);

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

}

#mac環境代碼實現(完整代碼)

#include

#include

typedef struct BiTNode

{

char data;

struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

void PreOrderTraverse(BiTree T)//二叉樹的先序遍歷

{

if(T==NULL)

return ;

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

PreOrderTraverse(T->lchild);

PreOrderTraverse(T->rchild);

}

void InOrderTraverse(BiTree T)//二叉樹的中序遍歷

{

if(T==NULL)

return ;

InOrderTraverse(T->lchild);

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

InOrderTraverse(T->rchild);

}

void PostOrderTraverse(BiTree T)//后序遍歷

{

if(T==NULL)

return;

PostOrderTraverse(T->lchild);

PostOrderTraverse(T->rchild);

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

}

void CreateBiTree(BiTree *T)

{

char ch;

scanf("%c",&ch);

if(ch=='#')

*T=NULL;

else

{

*T=(BiTree )malloc(sizeof(BiTNode));

if(!*T)

exit(-1);

(*T)->data=ch;

CreateBiTree(&(*T)->lchild);

CreateBiTree(&(*T)->rchild);

}

}

void pri(){

printf("\n");

}

int main()

{

BiTree T;

printf("輸入樹(#代表空節點 AB#C##D##):");

CreateBiTree(&T);

printf("前序遍歷的結果是:");

PreOrderTraverse (T);

printf("\n中序遍歷的結果是:");

InOrderTraverse(T);

printf("\n后序遍歷的結果是:");

PostOrderTraverse(T);

pri();

return 0;

}

總結

以上是生活随笔為你收集整理的linux 递归创建线程,[linux]二叉树的建立及其递归遍历(C语言实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。