이진 트리가 주어지면 1에서 n까지 시작하여 노드에 저장된 모든 키와 관련된 수준을 인쇄하는 작업입니다.
위의 트리에서 노드는 -
레벨 13에서 10, 레벨 2140에서 211, 레벨 3에서 162, 100 및 146
키가 주어지면 프로그램은 특정 키의 레벨을 인쇄해야 합니다.
예시
입력:10 3 211 140 162 100 146출력:10레벨이 1레벨 3이 2레벨 211이 2레벨 140이 3레벨 162레벨이 3입니다. 100레벨이 3레벨 146레벨이 3입니다.사전>알고리즘
STARTStep 1 -> struct node struct node로 노드의 구조를 생성 *left, *right int data EndStep 2 -> 노드 노드를 생성하는 함수* newnode(int data) node *temp =new node temp-> data =data temp->left =temp->right=NULL return tempstep 3 -> 노드의 레벨을 찾는 함수 생성 void 수준(Node* root) IF root=NULL Return End Create STL queue>que que.push({root, 1}) STL 쌍 생성 par Loop While !que.empty() par =que.front() que.pop() print par.first->데이터 및 par.second IF par.first->left que.push({ par.first->left, par.second + 1 }) END IF par.first->right que.push({ par.first-> 오른쪽, par.second + 1 }) EndSTOP 종료 예시
#include네임스페이스 std;//노드 구조체의 구조 사용 Node{ int data; struct Node *left, *right;};//treevoid 수준(Node* root){ if (root==NULL) return; 큐<쌍<구조 노드*, int>>큐; que.push({루트, 1}); pair par; 동안 (!que.empty()) { par =que.front(); que.pop(); cout <<"레벨 " < data <<" is " < left) que.push({ par.first->left, par.second + 1 }); if (par.first->right) que.push({ par.first->right, par.second + 1 }); }}//노드를 생성하여 treeNode*를 생성하는 함수 newnode(int data){ Node* temp =new Node; 임시 -> 데이터 =데이터; 임시 -> 왼쪽 =임시 -> 오른쪽 =NULL; return temp;}int main(){ 노드* 루트 =NULL; //노드를 생성합니다. root =newnode(34); 루트->왼쪽 =newnode(12); 루트->오른쪽 =newnode(50); 루트->왼쪽->왼쪽 =newnode(11); 루트->왼쪽->오른쪽 =newnode(54); 레벨(루트); 반환 0;} 출력
위의 프로그램을 실행하면 다음 출력이 생성됩니다.
34레벨이 1레벨 12레벨이 2레벨 50이 211레벨이 3레벨 54레벨이 3