Computer >> Máy Tính >  >> Lập trình >> C ++

In anh em họ của một nút nhất định trong Binary Treein C ++

Cây nhị phân là một cây đặc biệt mà mỗi nút có tối đa hai nút con. Vì vậy, mọi nút đều là nút lá hoặc có một hoặc hai nút con.

Ví dụ,

In anh em họ của một nút nhất định trong Binary Treein C ++

Trong bài toán này, chúng ta được đưa ra một cây nhị phân và chúng ta có một nút của cây và chúng ta phải tìm các nút anh em của nút. Không có nút anh em nào được in cho cây nhị phân.

Hãy lấy một ví dụ,

In anh em họ của một nút nhất định trong Binary Treein C ++

Đối với cây nhị phân ở trên, nút anh em họ là 5.

Để làm cho khái niệm rõ ràng hơn, hãy mô tả nút anh em họ. Trong cây nhị phân, hai nút được cho là nút anh em họ nếu chúng ở cùng mức (độ sâu) trong cây nhị phân nhưng không có cùng nút cha.

Bây giờ, hãy tạo giải pháp cho vấn đề này.

Ở đây chúng ta phải in tất cả các nút ở cùng mức của nút, tức là tất cả các nút ở cùng khoảng cách với nút gốc. Nhưng chúng ta phải loại bỏ nút có cùng cha với chính nút đó. Đối với điều này, trước tiên chúng ta sẽ tìm cấp của nút và sau đó in tất cả các nút ngoại trừ chính nút đó và nút có cùng một nút cha.

Ví dụ

Bây giờ, hãy tạo một chương trình dựa trên logic này -

#include <bits/stdc++.h>
using namespace std;
struct Node{
   int data;
   Node *left, *right;
};
Node *newNode(int item){
   Node *temp = new Node;
   temp->data = item;
   temp->left = temp->right = NULL;
   return temp;
}
int levelOfNode(Node *root, Node *node, int level){
   if (root == NULL)
      return 0;
   if (root == node)
      return level;
   int downlevel = levelOfNode(root->left,
   node, level + 1);
   if (downlevel != 0)
      return downlevel;
   return levelOfNode(root->right, node, level + 1);
}
void printCousin(Node* root, Node *node, int level){
   if (root == NULL || level < 2)
      return;
   if (level == 2){
      if (root->left == node || root->right == node)
         return;
      if (root->left)
         cout << root->left->data << " ";
      if (root->right)
         cout << root->right->data;
   }
   else if (level > 2){
      printCousin(root->left, node, level - 1);
      printCousin(root->right, node, level - 1);
   }
}
void cousinNode(Node *root, Node *node){
   int level = levelOfNode(root, node, 1);
   printCousin(root, node, level);
}
int main(){
   Node *root = newNode(11);
   root->left = newNode(15);
   root->right = newNode(4);
   root->left->left = newNode(3);
   root->left->right = newNode(7);
   root->left->right->right = newNode(9);
   root->right->left = newNode(17);
   root->right->right = newNode(8);
   root->right->left->right = newNode(5);
   cout<<”The cousin nodes are : \t”
   cousinNode(root, root->right->right);
   return 0;
}

Đầu ra

The cousin nodes are : 3 7