이 진 트 리 와 값 을 위 한 경 로 를 인쇄 합 니 다.

요구: 이 진 트 리 한 그루 와 정 수 를 입력 하고 이 진 트 리 의 노드 값 과 정 수 를 입력 하기 위 한 모든 경 로 를 출력 합 니 다.나무의 뿌리 노드 부터 잎 노드 가 지나 가 는 노드 까지 하나의 경 로 를 형성한다.이 진 트 리 의 노드 정 의 는 다음 과 같다.
struct BTNode
{
	int data;
	BTNode *leftChild;
	BTNode *rightChild;
};

사고: 경 로 를 구 하 는 것 은 뿌리 노드 에서 잎 노드 까지 이기 때문에 우 리 는 이 진 트 리 의 순서 로 구 조 를 옮 겨 다 니 는 것 을 고려 할 수 있다. 다음 과 같다.
4. 567913. 그러나 이 진 트 리 의 재 귀 구조 에서 부모 노드 로 거 슬러 올 라 갈 때 우 리 는 앞에서 재 귀 된 경로 의 노드 의 값 을 얻 을 수 없다. 이런 조작 은 시스템 이 자동 으로 재 귀 작업 스 택 으로 이 루어 진 것 이기 때문에 우 리 는 스스로 배열 을 정의 하여 지나 간 경로 의 노드 를 저장 해 야 한다.한 노드 에 접근 할 때마다 이 노드 를 경로 배열 에 추가 합 니 다. 잎 노드 에 도 착 했 을 때 우 리 는 경로 배열 의 값 과 만족 여 부 를 보고 만족 하면 출력 배열 의 노드 경 로 를 인쇄 합 니 다. 하위 노드 에서 부모 노드 로 돌아 갈 때마다 경로 배열 의 값 을 제거 해 야 합 니 다.즉, 스 택 에 재 귀 할 때 노드 의 값 을 추가 하고 스 택 을 재 귀 할 때 노드 의 값 을 제거 해 야 합 니 다.
상기 사고 코드 를 바탕 으로 다음 과 같다.
void preOrder(BTNode *root)
{
	if(root!=NULL)
	{
		cout<<root->data;
		preOrder(root->leftChild);
		preOrder(root->rightChild);
	}
}

좋은 웹페이지 즐겨찾기