求二叉樹兩節點的最遠距離

2021-06-27 02:54:35 字數 1434 閱讀 8844

題目要求比較簡單,寫一程式求一棵二叉樹中相距最遠的兩個節點之間的距離。

其實第一眼就能相當用遞迴是最簡單也是最直觀的:

以當前節點v為根的子樹中兩節點的最遠距離有三種情況:

1、距離最遠的兩個節點均在v的左子樹

2、距離最遠的兩個節點均在v的右子樹

3、距離最遠的兩個節點乙個在左子樹乙個在右子樹(或者v就是其中乙個節點)

對於第三種情況,只需要計算左子樹的高度和右子樹的高度,然後相加即可;

對於第一種和第二種情況,則需要知道左子樹的最遠距離,以及右子樹的最遠距離;

因此資料結構如下:

1struct node ;

其中left_height和right_height記錄左右子樹的高度;

函式實現如下:

1#define max(a, b) ((a) > (b) ? (a) : (b)) 2

3int find_max_len(node *t)  7

8int left_max_len = find_max_len(t->left); 9

int right_max_len = find_max_len(t->right); 10

11if (t->left)  14

if (t->right)  17

18int max_len = max(left_max_len, right_max_len);

19   max_len = max(max_len, t->left_height + t->right_height); 20

21return max_len;

22 }

函式有乙個返回值,用於返回以t為根的樹的最遠距離。

struct binarytreenode  

;

struct result

;

result getmaxdistance(binarytreenode *& proot)

; return empty;

} result leftresult = getmaxdistance(proot->m_pleft);

result rightresult = getmaxdistance(proot->m_pright);

result result;

result.nmaxdepth = 1+ max(leftresult.nmaxdepth, rightresult.nmaxdepth);

result.nmaxdistance =max( max(leftresult.nmaxdistance, rightresult.nmaxdistance), (leftresult.nmaxdepth+rightresult.nmaxdepth+2) );

return result;

}

計算二叉樹的任意兩節點的最遠距離。

利用計算二叉樹高度的方法計算兩個節點最遠距離。計算出乙個節點的深度,左右子樹的深度,然後加起來,就是這個節點的最遠的距離了。然後遍歷二叉樹的所以的節點,找出最大的節點即可。include using namespace std typedef struct btreenode node void c...

二叉樹結點最遠距離

給定二叉樹,求取該二叉樹多有節點中距離最遠的結點相隔的距離 以root為根節點的樹上,最大距離求取 情況一 root的左子樹上的最大距離 情況二 root的右子樹上的最大距離 情況三 root左子樹上距離root結點最遠的距離,加上root自身這個節點,再加上root右子樹上距離root右孩子最遠的...

(演算法)二叉樹兩個結點的最遠距離

求二叉樹兩個結點的最遠距離。二叉樹定義如下 class treenode 遍歷每個節點,找出以當前節點為根的最長路徑,然後找出所有最長路徑中的最大值。1 class node void longestpath 1 node proot,int maxlen int rightlen if proot...