deep=leftdeep=rightdeep?leftdeep+1:rightdeep+1;?
成都創(chuàng)新互聯主要從事網站設計、網站制作、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務柳林,十年網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18980820575
放在
leftdeep=TreeDeep(T-lchild);?
rightdeep=TreeDeep(T-rchild);
后面
就是一直訪問左孩子到樹的底部后再一層層返回去,返回一層深度加一,一旦遇到右孩子不為空時,再訪問右孩子的左孩子到樹的底部后再一層層返回去,返回一層深度加一,每一個結點都進行右孩子與左孩子深度的比較,取大返回
首先分析二叉樹的深度(高度)和它的左、右子樹深度之間的關系。從二叉樹深度的定義可知,二叉樹的深度應為其左、右子樹深度的最大值加1。由此,需先分別求得左、右子樹的深度,算法中“訪問結點”的操作為:求得左、右子樹深度的最大值,然后加 1 。
int Depth (BiTree T ){ // 返回二叉樹的深度
if ( !T ) depthval = 0;
else {
depthLeft = Depth( T-lchild );
depthRight= Depth( T-rchild );
depthval = 1 + (depthLeft depthRight ?
depthLeft : depthRight);
}
return depthval;
}
int BiTreeDepthHierarchy(BiThrTree T) //非遞歸類層次遍歷求二叉樹深度
{
int depth=0,hp,tp,lc; //hp為已訪問的結點數,tp歷史入隊的結點總數,lc為每層最后一個結點標記
LinkQueue Q;
BiThrNode *p;
if(T)
{
p=T;
hp=0;tp=1;lc=1;
InitQueue(Q);
EnQueue(Q,p);
while(!QueueEmpty(Q))
{
DeQueue(Q,p);
hp++; //hp為已訪問的結點數
if(p-lchild)
{
EnQueue(Q,p-lchild);
tp++; //tp記錄歷史入隊的結點總數
}
if(p-rchild)
{
EnQueue(Q,p-rchild);
tp++;
}
if(hp==lc) //當hp=lc時,表明本層結點均已訪問完
{
depth++;
lc=tp; //lc=tp,更新下層的末結點標記
}
}
}
return depth;
}
思想:對非空二叉樹,其深度等于左子樹的最大深度加1。
Int Depth(BinTree *T)
{
int dep1,dep2;
if(T==Null) return(0);
else
{
dep1=Depth(T-lchild);
dep2=Depth(T-rchild);
if(dep1dep2) return(dep1+1);
else return(dep2+1);
}
typedef int Status;
typedef char TElemType;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int GetDepth(BiTree T){
if(!T) return 0;
else{
int depthLeft = GetDepth( T-lchild );
int depthRight= GetDepth( T-rchild );
return (depthLeftdepthRight?depthLeft:depthRight)+1;
}
}
分享題目:求二叉樹高度的c語言函數 求二叉樹高度的c語言函數
路徑分享:http://muchs.cn/article44/hgieee.html
成都網站建設公司_創(chuàng)新互聯,為您提供網站制作、營銷型網站建設、網站設計、用戶體驗、微信公眾號、定制開發(fā)
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯