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语言实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux命令基本格式教程,Linux命
- 下一篇: linux条件测试的三种,shell编程