#include "stdafx.h"
// 各種引用
#include#include#include#include#define NULL 0
int m_nNumOfLeaf=0; // 葉子結(jié)點(diǎn)數(shù)量
typedef char ElemType; //定義二叉樹(shù)結(jié)點(diǎn)中保存的數(shù)據(jù)的數(shù)據(jù)類型
typedef struct BinaryNode //定義二叉樹(shù)結(jié)點(diǎn)的數(shù)據(jù)類型
{ElemType data; //存放二叉樹(shù)結(jié)點(diǎn)數(shù)據(jù)
struct BinaryNode *lchild, *rchild; //存放二叉樹(shù)結(jié)點(diǎn)左右子樹(shù)的指針(指向的數(shù)據(jù)類型是本身)
} BTNode;
BTNode * m_root= NULL; // 二叉樹(shù)指針(指向二叉樹(shù)的根結(jié)點(diǎn))
BTNode * CreatebBinaryTree()
{BTNode *T;
ElemType x;
scanf("%c",&x); // 獲取結(jié)點(diǎn)數(shù)據(jù)
if(x=='#') // 空結(jié)點(diǎn)
T=NULL;
else // 非空結(jié)點(diǎn)
{T=(BTNode*)malloc(sizeof(BTNode)); // 申請(qǐng)空間存儲(chǔ)結(jié)點(diǎn)
T->data=x; // 存儲(chǔ)數(shù)據(jù)
T->lchild=CreatebBinaryTree(); // 建立以本結(jié)點(diǎn)為根的左子樹(shù)
T->rchild=CreatebBinaryTree(); // 建立以本結(jié)點(diǎn)為根的右子樹(shù)
}
return(T); // 返回根結(jié)點(diǎn)
}
void PreOrderPrint(BTNode *t)
{if(t!=NULL) // 根結(jié)點(diǎn)不為空
{printf("%c\t",t->data); // 輸出根結(jié)點(diǎn)
PreOrderPrint(t->lchild); // 前序遍歷以本結(jié)點(diǎn)為根的左子樹(shù)
PreOrderPrint(t->rchild); // 前序遍歷以本結(jié)點(diǎn)為根的右子樹(shù)
}
}
void InOrderPrint(BTNode *t)
{if(t!=NULL) // 根結(jié)點(diǎn)不為空
{InOrderPrint(t->lchild); // 中序遍歷以本結(jié)點(diǎn)為根的左子樹(shù)
printf("%c\t",t->data); // 輸出根結(jié)點(diǎn)
InOrderPrint(t->rchild); // 中序遍歷以本結(jié)點(diǎn)為根的右子樹(shù)
}
}
void PostOrderPrint(BTNode *t)
{if(t!=NULL) // 根結(jié)點(diǎn)不為空
{
PostOrderPrint(t->lchild); // 后序遍歷以本結(jié)點(diǎn)為根的左子樹(shù)
PostOrderPrint(t->rchild); // 后序遍歷以本結(jié)點(diǎn)為根的右子樹(shù)
printf("%c\t",t->data); // 輸出根結(jié)點(diǎn)
}
}
void CalNumOfLeaf(BTNode *t)
{if(t!=NULL) // 根結(jié)點(diǎn)不為空
{if((t->lchild!=NULL)||(t->rchild!=NULL)) // 判斷該結(jié)點(diǎn)是否有左右子樹(shù)
{ CalNumOfLeaf(t->lchild); // 計(jì)算該結(jié)點(diǎn)左子樹(shù)的葉子結(jié)點(diǎn)數(shù)
CalNumOfLeaf(t->rchild); // 計(jì)算該結(jié)點(diǎn)右子樹(shù)的葉子結(jié)點(diǎn)數(shù)
}
else m_nNumOfLeaf++; // 是葉子結(jié)點(diǎn),則葉子結(jié)點(diǎn)數(shù)加1
}
}
int main(int argc, char* argv[]) // 主函數(shù)
{printf(" ***************************************\n");
printf(" 二叉樹(shù)操作\n");
printf(" ***************************************\n");
int flag = 1;
while(flag)
{printf("\n\n\t\t 1--建立\n");
printf("\t\t 2--前序遍歷\n");
printf("\t\t 3--中序遍歷\n");
printf("\t\t 4--后序遍歷\n");
printf("\t\t 5--葉子的數(shù)量\n");
printf("\t\t 0--退出程序\n");
printf("\t\t 程序編寫(xiě)人<姓名:%s ; 學(xué)號(hào):%s>\n","張三","123456789"); // 顯示 姓名和學(xué)號(hào)
scanf("%d",&flag);
switch(flag)
{ case 1: // 建立二叉樹(shù)
{ getchar(); // 獲取輸入的回車
printf("請(qǐng)輸入二叉樹(shù)各結(jié)點(diǎn)(前序順序,#代表空結(jié)點(diǎn)),形式如(AB###,ABC#####):\n"); // 輸出字符串
m_root = CreatebBinaryTree(); // 構(gòu)建二叉樹(shù)(前序)
printf("建立二叉樹(shù)完畢:\n"); // 輸出字符串
}
break;
case 2: // 前序遍歷
{ if(m_root == NULL) // 出錯(cuò)判斷
{printf("\n還沒(méi)有建立二叉樹(shù),無(wú)法進(jìn)行此操作!\n"); // 輸出字符串
}
else
{printf("\n二叉樹(shù)前序遍歷的順序?yàn)椋篭n"); // 輸出字符串
PreOrderPrint(m_root); // 前序遍歷輸出
printf("\n二叉樹(shù)前序遍歷結(jié)束:\n"); // 輸出字符串
}
}
break;
case 3: // 中序遍歷
{
if(m_root == NULL) // 出錯(cuò)判斷
{printf("\n還沒(méi)有建立二叉樹(shù),無(wú)法進(jìn)行此操作!\n"); // 輸出字符串
}
else
{printf("\n二叉樹(shù)中序遍歷的順序?yàn)椋篭n"); // 輸出字符串
InOrderPrint(m_root); // 中序遍歷輸出
printf("\n二叉樹(shù)中序遍歷結(jié)束:\n"); // 輸出字符串
}
}
break;
case 4: // 后序遍歷
{
if(m_root == NULL) // 出錯(cuò)判斷
{printf("\n還沒(méi)有建立二叉樹(shù),無(wú)法進(jìn)行此操作!\n"); // 輸出字符串
}
else
{printf("\n二叉樹(shù)后序遍歷的順序?yàn)椋篭n"); // 輸出字符串
PostOrderPrint(m_root); // 后序遍歷輸出
printf("\n二叉樹(shù)后序遍歷結(jié)束:\n"); // 輸出字符串
}
}
break;
case 5: // 計(jì)算葉子結(jié)點(diǎn)的數(shù)目
{ if(m_root == NULL) // 出錯(cuò)判斷
{printf("\n還沒(méi)有建立二叉樹(shù),無(wú)法進(jìn)行此操作!\n"); // 輸出字符串
}
else
{m_nNumOfLeaf=0; // 葉子結(jié)點(diǎn)數(shù)量初始化
CalNumOfLeaf(m_root); // 計(jì)算葉子結(jié)點(diǎn)數(shù)量
printf("\n當(dāng)前二叉樹(shù)中葉子數(shù)量為:%d\n",m_nNumOfLeaf); // 輸出字符串
}
}
break;
case 0: // 退出程序
break;
default: // 輸入錯(cuò)誤
printf("請(qǐng)輸入正確的數(shù)字!!!\n");
break;
}
}
return 0;
}
運(yùn)行結(jié)果免費(fèi)下載代碼解析下載
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧