두 갈래 나무 중 가장 먼 두 잎 노드의 거리를 구하다

1267 단어
질문:
두 갈래 나무 한 그루(비두 갈래 검색 나무)를 정해서 두 갈래 나무 중 가장 먼 두 잎 노드 사이의 거리를 구합니까?그 중에서 두 잎 사이의 거리는 다음과 같이 정의된다. F(X, Y) = 노드 X에서 루트 노드 경로까지의 모든 노드 데이터의 합 + 노드 Y에서 루트 노드 경로까지의 모든 노드 데이터의 합 - X와 Y의 첫 번째 조상 노드에서 루트 노드 경로까지의 모든 노드 데이터의 합이다.
생각:
1. 모든 노드를 뒤따라 이 노드에서 가장 오른쪽까지의 거리와 가장 왼쪽까지의 거리를 찾아낸다.
2, 가장 큰 것을 찾으면 된다.
struct TNode
{
	int data;
	TNode * left_child;
	TNode * right_child;
}

void FindMax( TNode *pNode, int &max_distance, int &tot_distance )
{
	if( pNode == NULL )
	{	max_distance = 0;
		tot_distance = 0;
		return;
	}
	else
	{
		int left_max_distance;
		int left_tot_distance;
		int right_max_distance;
		int right_tot_distance;
		FindMax( pNode->left_child, left_max_distance, left_tot_distance);
		FindMax( pNode->right_child, right_max_distance, right_tot_distance);

		tot_distance = left_max_distance + right_max_distance + pNode->data;
		max_distance = left_max_distance>right_max_distance?(left_max_distance+pNode->data):(right_max_distance+pNode->data);
		
		tot_distance = tot_distance>left_tot_distance?tot_distance:left_tot_distance;
		tot_distance = tot_distance>right_tot_distance?tot_distance:right_tot_distance;
	}
}

main()
{
	FindMax( pNode, max_distance, result);
}

좋은 웹페이지 즐겨찾기