程式設計之美 求二叉樹節點的最大距離

2021-07-17 00:13:06 字數 1179 閱讀 5921

問題描述:

把在二叉樹中,從乙個節點到另乙個節點的需要經過的邊數,定義為距離。

求一棵二叉樹中,距離最遠的兩個節點之間的距離是多少?

問題分析:

最遠的節點可能出現兩種情況:

1)  位於根節點下面兩棵不同的子樹上,例如節點c和d

2)  位於根節點下面同一棵子樹上,例如節點 f 和 i,他們位於b子樹上。

這樣問題可以轉化為求二叉樹子樹上的最遠節點,根節點也可以看做是一棵特殊的子樹。

1)  乙個節點除了儲存左右子樹的指標外,還分別儲存它左右子樹中節點的最大的距離。

2)  如果是葉子節點,那麼它左右子樹的節點的最大距離都是 0。

3)  通過深度優先遍歷,由葉子節點逐層向上計算距離,並更新子樹的根節點的最大的左右子樹的距離。

4)  同時使用全域性變數儲存最大距離的值。

5)  當深度變數完成後,可以得到整個樹中最遠的兩個節點的距離。

一種動態規劃的想法。

**:

#include using namespace std;

typedef struct _node

node;

int nmax = 0;

void calc(node* pnode)

else

if (null == pnode->_right)

else

if (pnode->_left != null)

else

}if (pnode->_right != null)

else

}ntmp = pnode->_max_right + pnode->_max_left;

if (ntmp > nmax)

}void construct_test1(node* &proot)

void construct_test2(node* &proot)

int main()

求二叉樹節點的最大距離

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

程式設計之美 求二叉樹中節點的最大距離

1.問題描述 寫乙個程式求一棵二叉樹相距最遠的兩個節點之間的距離 如下圖 2.分析與解法 對於任意乙個節點,以該節點為根,假設這個根有k個孩子節點,那麼距離最遠的兩個節點u與v之間的路徑與這個根節點的關係有兩種。1 若路徑經過root,則u和v屬於不同子樹的,且它們都是該子樹中到根節點最遠的節點,否...

程式設計之美 求二叉樹中節點的最大距離

1.問題描述 寫乙個程式求一棵二叉樹相距最遠的兩個節點之間的距離 如下圖 2.分析與解法 對於任意乙個節點,以該節點為根,假設這個根有k個孩子節點,那麼距離最遠的兩個節點u與v之間的路徑與這個根節點的關係有兩種。1 若路徑經過root,則u和v是屬於不同子樹的,且它們都是該子樹中到根節點最遠的節點,...