알고리즘 문제16: 이원 트리를 입력하여 위에서 아래로 층별로 트리의 각 결점을 인쇄하고 같은 층에서 왼쪽에서 오른쪽으로 순서대로 인쇄한다
-----------------------------------
여전히 두 갈래 나무다. 그것이 바로 훑어보는 문제다. 자, 이곳을 훑어보는 것은 우리가 이전의 훑어보는 방식이 아닌 것 같다. 만약에 그 순서에 따라 깊이를 우선하는 훑어보는 방식이다. 여기서 더 바라는 것은 넓이로 인쇄하는 것이다. 물론 여기는 저장 메커니즘을 빌려야 한다. 물론 체인 시계이기도 하다. 생각해 보면 체인 시계에 먼저 들어간 요소는 층수보다 높고 인쇄되어야 한다.그리고 그것의 하층부를 합류시키는 것으로 유추하다
드디어 이 문제는 오랫동안 쓰지 못한 데이터 구조---대열!!
자, 여기 보시면 답을 얻을 수 있을 거예요.
다음은 이 문제의 답안을 제시하는 동시에 하중서 인쇄를 연습했습니다. 물론 간단하지만...
여러분 스스로 대기열을 작성해서 알고리즘을 연습할 때 라이브러리의 Queue를 최대한 적게 사용하시기 바랍니다.
//============================================================================
// Name : PrintBT.cpp
// Author : YLF
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
using namespace std;
/*
*
*/
struct Node{
int value;
Node* left;
Node* right;
};
/*
*
*/
struct QueueNode{
Node* node;
QueueNode* next;
};
void addNode(Node* &p, int value);
void printBT(Node* p);
void printBTByFloor();
QueueNode* containerHead = NULL;
QueueNode* containerCur = NULL;
int main() {
Node* head = NULL;
int input = 0;
while(true){
cin>>input;
if(input != -1)
addNode(head, input);
else
break;
}
printBT(head);
cout<<endl;
//
if(head){
containerHead = new QueueNode();
containerHead->next = NULL;
containerHead->node = head;
containerCur = containerHead;
}
printBTByFloor();
return 0;
}
void addNode(Node* &p, int value){
if(p == NULL){
Node* temp = new Node();
temp->value = value;
temp->left = NULL;
temp->right = NULL;
p = temp;
}else{
if(value < p->value)
addNode(p->left, value);
else
addNode(p->right, value);
}
}
/*
*
*/
void printBTByFloor(){
if(containerHead == NULL)
return;
cout<<containerHead->node->value<<" ";
if(containerHead->node->left){
QueueNode* l = new QueueNode();
l->node = containerHead->node->left;
l->next = NULL;
containerCur->next = l;
containerCur = l;
}
if(containerHead->node->right){
QueueNode* r = new QueueNode();
r->node = containerHead->node->right;
r->next = NULL;
containerCur->next = r;
containerCur = r;
}
QueueNode* temp = containerHead;
containerHead = containerHead->next;
delete temp;
printBTByFloor();
}
/*
*
*/
void printBT(Node* p){
if(p == NULL)
return;
printBT(p->left);
cout<<p->value<<" ";
printBT(p->right);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Sql의 실행 순서가 어떻게 되는지 알려드릴게요.select*단지 당신이 Sql 대문에 들어서는 첫걸음일 뿐, 실제 업무에서 틀림없이 이렇게 간단하지 않을 것이다.우리 예를 하나 봅시다. 위의 요구 사항을 수행하려면 다음과 같이 Sql을 사용할 수 있습니다. 위의...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.