真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)的構(gòu)造與遍歷-創(chuàng)新互聯(lián)

實(shí)驗(yàn)?zāi)康?p>本文主要是給c語(yǔ)言初學(xué)者或數(shù)據(jù)結(jié)構(gòu)初學(xué)者展示二叉樹(shù)的構(gòu)造與遍歷,可以作為簡(jiǎn)單的參考。除了代碼外,本文有部分博主自己對(duì)代碼的簡(jiǎn)單分析,可以通過(guò)下面的鏈接免費(fèi)下載。

成都網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、重慶網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站制作等服務(wù)項(xiàng)目。核心團(tuán)隊(duì)均擁有互聯(lián)網(wǎng)行業(yè)多年經(jīng)驗(yàn),服務(wù)眾多知名企業(yè)客戶;涵蓋的客戶類型包括:成都塔吊租賃等眾多領(lǐng)域,積累了大量豐富的經(jīng)驗(yàn),同時(shí)也獲得了客戶的一致贊揚(yáng)!
代碼
#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é)果

運(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)查看詳情吧


本文標(biāo)題:數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)的構(gòu)造與遍歷-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://weahome.cn/article/dgeido.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部