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

//後序 求 每個節點最遠距離, 倒着遍歷, 只遍歷了一遍 O( N )
//如果從上往下遍歷 則 O( N*N )

int GetMaxPathLen( Node* root, int& maxLen )	//maxLen初始值傳0
{
	//別用 全局變量(存在線程安全問題)
	if ( NULL == root )
		return 0;

	int left = GetMaxPathLen( root->_left, maxLen );
	int right = GetMaxPathLen( root->_right, maxLen );

	if ( left + right > maxLen )
		maxLen = left + right;

	//返回高度
	return (left>right? left:right) + 1;
}

//運行結束後的 maxLen值 就是樹中最遠的兩個節點的距離

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章