求二叉树中最远的两个节点间的距离

//后序 求 每个节点最远距离, 倒着遍历, 只遍历了一遍 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值 就是树中最远的两个节点的距离

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