題目描述
對二叉樹,計算任意兩個結點的最短路徑長度。
輸入
第一行輸入測試資料組數 t 第二行輸入 n , m 。 n 代表結點的個數, m 代表要查詢的資料組數。 接下來 n 行,每行輸入兩個數,代表1~ n 結點的孩子結點,如果沒有孩子結點則輸入-1,根節點為1。 接下來 m 行,每行輸入兩個數,代表要查詢的兩個結點。
輸出
每組測試資料輸出 m 行,代表查詢的兩個結點之間的最短路徑長度。
測試樣例
輸入
1
8 42 3
4 56 -1
-1 -1
-1 7
-1 -1
8 -1
-1 -1
1 64 6
4 58 1
輸出
242
4
#include
using
namespace std;
int fa[
1005];
intmain()
if(b!=-1
)}while
(m--
)while
(b)while
(!s1.
empty()
&&!s2.
empty()
&&s1.
top(
)==s2.
top())
cout
+s2.
size()
<}
二叉樹節點的最大距離
程式設計之美3.10節。完整 如下 view code 1 include 2 include 3 include 4 include 5 include 6 include 7 using namespace std 89 struct node 1018 19 20void createtree...
求二叉樹節點的最大距離
即二叉樹中相距最遠的兩個節點之間的距離。遞迴解法 1 如果二叉樹為空,返回0,同時記錄左子樹和右子樹的深度,都為0 2 如果二叉樹不為空,最大距離要麼是左子樹的最大距離,要麼是右子樹的最大距離,要麼是左子樹節點中到根節點的最大距離 右子樹節點中到根節點的最大距離,同時記錄左子樹和右子樹節點中到根節點...
二叉樹節點間的最大距離
問題 從二叉樹節點 出發,可以向上或者向下走,但沿途的節點只能經過一次,當到達節點 時,路徑上的節點數叫做 到 的距離。基本思路 乙個以 為頭的樹上,最大的距離只可能來自以下三種情況 左子樹上的最大距離 右子樹上的最大距離 左子樹上離h.left最遠的距離 右子樹上離h.right最遠的距離 三個值...