이 튜토리얼에서는 이진 트리의 주어진 두 레벨 번호 사이의 노드를 인쇄하는 프로그램에 대해 논의할 것입니다.
여기에서 특정 이진 트리에 대해 낮은 수준과 높은 수준이 제공되며 주어진 수준 사이의 모든 요소를 인쇄해야 합니다.
이를 해결하기 위해 대기열 기반 수준 순회를 사용할 수 있습니다. 중위 순회를 통해 이동하는 동안 각 수준의 끝에 표시 노드를 가질 수 있습니다. 그런 다음 지정된 수준 사이에 표시 노드가 있는 경우 각 수준으로 이동하여 해당 노드를 인쇄할 수 있습니다.
예시
#include <iostream> #include <queue> using namespace std; struct Node{ int data; struct Node* left, *right; }; //to print the nodes between the levels void print_nodes(Node* root, int low, int high){ queue <Node *> Q; //creating the marking node Node *marker = new Node; int level = 1; Q.push(root); Q.push(marker); while (Q.empty() == false){ Node *n = Q.front(); Q.pop(); //checking for the end of level if (n == marker){ cout << endl; level++; if (Q.empty() == true || level > high) break; Q.push(marker); continue; } if (level >= low) cout << n->data << " "; if (n->left != NULL) Q.push(n->left); if (n->right != NULL) Q.push(n->right); } } Node* create_node(int data){ Node* temp = new Node; temp->data = data; temp->left = temp->right = NULL; return (temp); } int main(){ struct Node *root= create_node(20); root->left= create_node(8); root->right= create_node(22); root->left->left= create_node(4); root->left->right= create_node(12); root->left->right->left= create_node(10); root->left->right->right= create_node(14); cout << "Elements between the given levels are :"; print_nodes(root, 2, 3); return 0; }
출력
Elements between the given levels are : 8 22 4 12