求二叉樹節點間最大距離的問題 C 實現

2021-09-29 17:50:48 字數 1415 閱讀 4561

我們先來看下二叉樹結點之間的距離的定義

所謂二叉樹結點之間的距就是兩個結點之間的某一條路徑上的結點個數。例如如下的一顆樹:

結點之間的距離:選取一條路徑k->e->b->a->c,那麼他們之間的距離就是5。

有了上面的作為背景,接下來看看一道具體的例題

從二叉樹的節點 a 出發,可以向上或者向下走,但沿途的節點只能經過一次,當到達節點 b 時,路徑上的節點數叫作 a 到 b 的距離。

現在給出一棵二叉樹,求整棵樹上每對節點之間的最大距離。

輸r入描述:

第一行輸入兩個整數 n 和 root,n 表示二叉樹的總節點個數,root 表示二叉樹的根節點。

以下 n 行每行三個整數 fa,lch,rch,表示 fa 的左兒子為 lch,右兒子為 rch。(如果 lch 為 0 則表示 fa 沒有左兒子,rch同理)

輸出描述:

輸出乙個整數表示答案

輸入

7 11 2 3

2 4 5

4 0 0

5 0 0

3 6 7

6 0 0

7 0 0輸出5

下面來仔細分析下這道題

求整棵樹上每對節點之間的最大距離,這裡可以分成兩種情況:

下面來看看具體的**

二叉樹類

class

binary_tree

};

例項類

class

solution}}

;

測試

#include

using

namespace std;

int maxlen =0;

//記錄最大的長度

intmain()

for(

int i =

0; i < node_num; i++

) solution solution;

solution.

dfs(binary_tree[root]);

cout << maxlen+

1<< endl;

return0;

}

這裡要強調下:上面**裡面的dfs()函式裡面求的maxlen是路徑上途徑的點的個數,沒有包括起始點,所以最後輸出的時候要加1.

二叉樹節點間的最大距離問題

題目 二叉樹中,乙個節點可以往上走和往下走,那麼從節點a總能走到節點b。節點a走到節點b的距離為 a走到b最短路徑上的節點個數。求一棵二叉樹上的最遠距離。public class maxdistanceintree public static class returntype public stat...

二叉樹節點間的最大距離

問題 從二叉樹節點 出發,可以向上或者向下走,但沿途的節點只能經過一次,當到達節點 時,路徑上的節點數叫做 到 的距離。基本思路 乙個以 為頭的樹上,最大的距離只可能來自以下三種情況 左子樹上的最大距離 右子樹上的最大距離 左子樹上離h.left最遠的距離 右子樹上離h.right最遠的距離 三個值...

求二叉樹節點的最大距離

即二叉樹中相距最遠的兩個節點之間的距離。遞迴解法 1 如果二叉樹為空,返回0,同時記錄左子樹和右子樹的深度,都為0 2 如果二叉樹不為空,最大距離要麼是左子樹的最大距離,要麼是右子樹的最大距離,要麼是左子樹節點中到根節點的最大距離 右子樹節點中到根節點的最大距離,同時記錄左子樹和右子樹節點中到根節點...