/* 二叉樹結點中的最大距離*/
struct node
;int nmaxlen = 0;
//尋找樹中最長的兩段距離
void findmaxlen(node* proot)
if(proot -> pleft == null)
if(proot -> pright == null)
if(proot -> pleft != null)
if(proot -> pright != null)
//計算左子樹最長節點距離
if(proot -> pleft != null)
else
proot -> nmaxleft = ntempmax +1;
} //計算右子樹節點最長距離
if(proot -> pright != null)
else
proot -> nmaxright = ntempmax +1;
} //更新最長距離
if(proot -> nmaxleft + proot -> nmaxright > nmaxlen)
}
求二叉樹中結點的最大距離
距離 是兩結點之間邊的個數。求最大距離存在兩種情況,一是路徑經過左子樹的最深結點,通過根結點,再到右子樹的最深結點。二是不穿過根結點,二是左子樹或右子樹的最大距離路徑中,取其大者。問題的核心在於兩種不同的情況需要不同的資訊,一是需要子樹的最大深度,二是需要子樹的最大距離。遞迴 如下 先序遍歷輸入用例...
二叉樹最大距離
問題描述 給出一棵二叉樹,求二叉樹上最遠的兩個節點的距離 分析 最長距離即兩個節點間經過的路徑最長,可以把問題分解為每個節點的左子樹的最大深度與右子樹的最大深度之和的最大值,保留這個最大值並對比各節點的最大值即可得出 遞迴演算法如下 int max 0 int depth node root int...
在最長的距離二叉樹結點
分為兩 當後最長的距離root 沒有距離最長root,1.若路徑經過根root。則u和v是屬於不同子樹的,且它們都是該子樹中道根節點最遠的節點。否則跟它們的距離最遠相矛盾。這樣的情況如圖3 13所看到的 2.假設路徑不經過root。那麼它們一定屬於根的k個子樹之中的乙個。而且它們也是該子樹中相距最遠...