問題描述:
把在二叉樹中,從乙個節點到另乙個節點的需要經過的邊數,定義為距離。
求一棵二叉樹中,距離最遠的兩個節點之間的距離是多少?
問題分析:
最遠的節點可能出現兩種情況:
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是屬於不同子樹的,且它們都是該子樹中到根節點最遠的節點,...