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

C++에서 이진 트리의 모든 전체 노드 인쇄


이 문제에서는 이진 트리가 제공됩니다. 우리의 임무는 전체 노드인 트리의 모든 노드를 인쇄하는 것입니다.

이진 트리 노드가 최대 2개의 자식 노드를 가질 수 있는 트리입니다. 노드 또는 정점에는 노드가 없을 수 있습니다. 하나의 자식 또는 두 개의 자식 노드가 있을 수 있습니다.

예시 -

C++에서 이진 트리의 모든 전체 노드 인쇄

전체 노드 왼쪽과 오른쪽 자식을 모두 사용할 수 있는 노드입니다. 즉, 왼쪽과 오른쪽 자식이 있는 노드가 전체 노드입니다. 위의 이진 트리에서 4와 9는 전체 노드입니다.

문제를 이해하기 위해 예를 들어 보겠습니다 -

C++에서 이진 트리의 모든 전체 노드 인쇄

출력 − 4 9

이 문제를 해결하기 위한 간단하고 쉬운 접근 방식은 순회 알고리즘을 사용하여 트리를 순회하는 것입니다. 현재 노드에 왼쪽 및 오른쪽 자식 또는 노드가 있는지 확인합니다. 그렇다면 노드의 값을 인쇄하고 그렇지 않으면 그대로 둡니다.

예시

우리의 솔루션을 설명하는 프로그램,

#include <iostream>
using namespace std;
struct Node{
   int data;
   struct Node *left, *right;
};
Node *insertNode(int data){
   Node *temp = new Node;
   temp->data = data;
   temp->left = temp->right = NULL;
   return temp;
}
void printFullNode(Node *root){
   if (root != NULL){
      printFullNode(root->left);
      if (root->left != NULL && root->right != NULL)
         cout<<root->data<<"\t";
      printFullNode(root->right);
   }
}
int main(){
   Node* root = insertNode(100);
   root->left = insertNode(56);
   root->right = insertNode(12);
   root->left->left = insertNode(89);
   root->right->left = insertNode(32);
   root->right->right = insertNode(45);
   cout<<"All full nodes of the tree are :\n";
   printFullNode(root);
   return 0;
}

출력

All full nodes of the tree are −
100 12