#include
#include
#include
typedef int ElemType; //數據類型
typedef int Status; //返回值類型
//定義二叉樹結構
typedef struct BiTNode{
ElemType data; //數據域
struct BiTNode *lChild, *rChlid; //左右子樹域
}BiTNode, *BiTree;
//先序創建二叉樹
Status CreateBiTree(BiTree *T)
{
ElemType ch;
ElemType temp;
scanf("%d", &ch);
temp = getchar();
if (-1 == ch)
*T = NULL;
else
{
*T = (BiTree)malloc(sizeof(BiTNode));
if (!(*T))
exit(-1);
(*T)->data = ch;
printf("輸入%d的左子節點:", ch);
CreateBiTree(&(*T)->lChild);
printf("輸入%d的右子節點:", ch);
CreateBiTree(&(*T)->rChlid);
}
return 1;
}
//先序遍歷二叉樹
void TraverseBiTree(BiTree T)
{
if (NULL == T)
return ;
printf("%d ", T->data);
TraverseBiTree(T->lChild);
TraverseBiTree(T->rChlid);
}
//中序遍歷二叉樹
void InOrderBiTree(BiTree T)
{
if (NULL == T)
return ;
InOrderBiTree(T->lChild);
printf("%d ", T->data);
InOrderBiTree(T->rChlid);
}
//後序遍歷二叉樹
void PostOrderBiTree(BiTree T)
{
if (NULL == T)
return ;
PostOrderBiTree(T->lChild);
PostOrderBiTree(T->rChlid);
printf("%d ", T->data);
}
//二叉樹的深度
int TreeDeep(BiTree T)
{
int deep = 0;
if(T)
{
int leftdeep = TreeDeep(T->lChild);
int rightdeep = TreeDeep(T->rChlid);
deep = leftdeep>=rightdeep?leftdeep+1:rightdeep+1;
}
return deep;
}
//求二叉樹葉子結點個數
int Leafcount(BiTree T,int &num)
{
if(T)
{
if(T->lChild ==NULL &&T->rChlid==NULL)
num++;
Leafcount(T->lChild,num);
Leafcount(T->rChlid,num);
}
return num;
}
//主函數
int main(void)
{
BiTree T;
BiTree *p = (BiTree*)malloc(sizeof(BiTree));
int deepth,num=0 ;
printf("請輸入第一個結點的值,-1表示沒有葉結點:\n");
CreateBiTree(&T);
printf("先序遍歷二叉樹:\n");
TraverseBiTree(T);
printf("\n");
printf("中序遍歷二叉樹:\n");
InOrderBiTree(T);
printf("\n");
printf("後序遍歷二叉樹:\n");
PostOrderBiTree(T);
printf("\n");
deepth=TreeDeep(T);
printf("樹的深度爲:%d",deepth);
printf("\n");
Leafcount(T,num);
printf("樹的葉子結點個數爲:%d",num);
printf("\n");
return 0;
}
C語言二叉樹創建、遍歷、深度、葉子節點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.