귀속 함수 사용 for 순환의 문제 해결

1785 단어 트리에 반복
다음 코드가 하나의 트리에 귀속되는 구조는 하나의 확정이 있을 것이다. 바로 전송된 노드가 오른쪽 형제rightSibling일 때 이 오른쪽 형제의 트리는 널리 퍼지지 않았다. 왜냐하면 nodeTemp-rightSibling이지 node->rightSibling이 아니기 때문이다.
void InitialGraph(Node *node)
{

	if(node!=NULL)
	{
		gltMakeCylinder(node->triangleBatch,node->start_radius, node->end_radius,node->length, 50, 10);
		
	}
	for(Node *nodeTemp=node->next ; nodeTemp!=NULL ; nodeTemp=nodeTemp->rightSibling)
	{

		InitialGraph(nodeTemp);
		
	}
	
}
 
nodeTemp->rightSiblint를 node->rightSibling으로 직접 바꾼다고 생각할 수 있습니다.해결할 수 있지만 사실은 사순환에 들어갔다(백방으로 풀 수 없을 수도 있고 바늘을 하나 앞당기는 것과 같을 뿐). 왜냐하면nodeTemp!NULL ; nodeTemp=node->rightSibling은 항상 이 for 조건을 실행하고 실행 순환체를 사용합니다.문제는 항상 Node->rightSibling을 사용해서 NodeTemp 바늘이 바뀌지 않았는데, 우리 위의 코드는 왜 사순환에 들어가지 않았는가 하는 것이다. 왜냐하면 NodeTemp=nodeTemp->rightSibling은 끊임없이 NodeTemp에 대해 이동 변화를 진행하기 때문이다.
그래서 우리는 이 문제를 수정해야 한다. 노드의 바늘만 수정하면 된다. 그리고 세부 사항에 주의해야 한다.
 
 
void InitialGraph(Node *node)
{

	if(node!=NULL)
	{
		gltMakeCylinder(node->triangleBatch,node->start_radius, node->end_radius,node->length, 50, 10);
	}
	for(Node *nodeTemp=node->next ; nodeTemp!=NULL ; nodeTemp=node)
	{

		InitialGraph(nodeTemp);
		node=node->rightSibling;
		if(node==NULL)
			break;
	}
	
}
 
테스트를 통해 위의 코드에 문제가 있는 것은 바로 뒤의 노드가 여러 번 반복되는 것이다.따라서 순환과 귀환은 동시에 사용하지 않는 것이 좋다.증명이 됐어요.

데이터 구조와 알고리즘(C++판) / 당녕구에서 트리를 누비는 알고리즘은 사실 엄밀하지 않다.

좋은 웹페이지 즐겨찾기