Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++ 프로그래밍의 이진 트리에 있는 모든 노드의 레벨을 인쇄합니다.

<시간/>

이진 트리가 주어지면 1에서 n까지 시작하여 노드에 저장된 모든 키와 관련된 수준을 인쇄하는 작업입니다.

C++ 프로그래밍의 이진 트리에 있는 모든 노드의 레벨을 인쇄합니다.

위의 트리에서 노드는 -

레벨 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