題目如下:
/*
* 查詢一棵樹兩節點最長距離
* 如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,我們姑且定義"距離"為兩節點之間邊的個數。
*寫乙個程式,求一棵二叉樹中相距最遠的兩個節點之間的距離。測試用的樹:
n1/ \
n2 n3
/ \
n4 n5
/ \ / \
n6 n7 n8 n9
/ /
n10 n11
* **/
**如下:
public class longestpath
public static int longestpath(treenode root)
if(root.left==null&&root.right==null)
if(root.left==null)
if(root.right==null)
leftlong=longestpath(root.left);
rightlong=longestpath(root.right);
int t=math.max(leftlong, rightlong);
return math.max(t,deep(root.left)+deep(root.right)+2);
}//求樹的深度
public static int deep(treenode root)
if(root.left==null&&root.right==null)
if(root.left==null)
if(root.right==null)
return math.max(deep(root.left),deep(root.right))+1; }
}
treenode類如下:
class treenode
}
經測試,驗證通過!!!
求一棵樹兩個點的最遠距離
原題 1361 樹的最遠距離 題意 給一棵樹,求兩個點這間的距離的最大值 解析 想了很久,發現兩個點a,b也就只有幾種情況 a為b的父結點 a與b屬於同一父結點的兩條不同分支 看到題目,很多人當然會想到離root最遠的那個結點。我們現在就利用這個結點來設計演算法。證明 最遠路一點以最遠結點為端點 如...
樹 二叉樹任意兩個節點之間路徑的最大長度
int maxdist tree root if root right null root rm maxdist root right 1 如果以該節點為根的子樹中有最大的距離,那就更新最大距離 int sum root rm root lm if sum max return root rm ro...
求二叉樹中兩個節點的最大距離
二叉樹節點的結構體定義如下 struct btreenode 使用遞迴的方式,遍歷二叉樹,然後從葉子節點開始修改結構體中的 maxleft 和 maxright 變數,直至回溯到根節點。詳細的 如下 include using namespace std 將節點儲存的資料型別設為整型 typedef...