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

Chu kỳ độ dài tối đa có thể được hình thành bằng cách nối hai nút của cây nhị phân trong C ++

Chúng tôi được cung cấp một cây nhị phân. Mục đích là để tìm chu kỳ độ dài lớn nhất trong cây đã cho. Wewill thực hiện việc này bằng cách tìm chiều cao tối đa của cây con bên trái và cây con bên phải từ nút gốc và sẽ nối các đường dẫn có độ dài tối đa này để có được chu kỳ dài nhất.

Chu kỳ độ dài tối đa có thể được hình thành bằng cách nối hai nút của cây nhị phân trong C ++

Đối với cây trên, chu kỳ chiều dài tối đa là 1-2-3-4-7-6 hoặc 1-6-7-4-3-2-1. Chiều dài là 6.

Đầu vào - cây

Chu kỳ độ dài tối đa có thể được hình thành bằng cách nối hai nút của cây nhị phân trong C ++

Đầu ra - Chu kỳ độ dài tối đa là - 5

Giải thích - Chiều cao lớn nhất của cây con bên trái là 3 và của cây con bên phải là 1. Độ dài chu kỳ trở thành 3 + 1 + 1 =5. Chu kỳ là 1-2-3-4-6 hoặc 1-6-4-3-2

Đầu vào - cây

Chu kỳ độ dài tối đa có thể được hình thành bằng cách nối hai nút của cây nhị phân trong C ++

Đầu ra - Chiều dài chu kỳ tối đa là - 7

Giải thích - Chiều cao lớn nhất của cây con bên trái là 3 và của cây con bên phải là 3. Độ dài chu kỳ trở thành 3 + 3 + 1 =7. Chu kỳ là 5-4-2-1-8-7-6 hoặc 5-6-7-8-1-2-4-5

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Tạo một treenode lớp có các thành viên dữ liệu công khai - dữ liệu int cho trọng số của nút, các con trỏ treenode trái và phải để trỏ đến các nút khác.

  • Hàm newNode (int data) lấy dữ liệu làm tham số và tạo một nút với con trỏ trái và phải là NULL.

  • Tạo cây bằng cách gọi hàm newnode ().

  • Hàm maxheight (treenode * root) lấy gốc của cây và trả về giá trị tối đa của cây có gốc ở gốc.

  • Hàm này kiểm tra nếu gốc là NULL, nghĩa là chiều cao là 0, trả về 0.

  • lheight và rheight tính toán chiều cao của cây con bên trái và bên phải của gốc nút, bằng cách gọi đệ quy tới maxheight (root-> left); và maxheight (root-> right);

  • Trả lại giá trị tối đa thu được bằng cách so sánh độ sáng và độ cao.

  • Bên trong main, chúng tôi lưu trữ các giá trị chiều cao tối đa của cây con bên trái và cây con bên phải của treeNode.

  • Giờ đây, chu kỳ độ dài tối đa là tổng của cả maxlheight + maxrheight + 1 bao gồm cả gốc.

  • Kết quả là in độ dài của chu kỳ.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
//class for tree
class treenode{
public:
   int data;
   treenode* left;
   treenode* right;
};
//find maximum height between left and right subtree of current root
int maxheight(treenode* root){
   if (root == NULL)
      return 0;
   else{
      int lheight = maxheight(root->left);
      int rheight = maxheight(root->right);
      //find maximum height
      if (lheight > rheight)
         return(lheight + 1);
      else
         return(rheight + 1);
      }
   }
   //creating a node of tree
   treenode* newNode(int data){
      treenode* Node = new treenode();
      Node->data = data;
      Node->left = NULL;
      Node->right = NULL;
      return(Node);
}
int main(){
   treenode *root = newNode(6);
   root->left = newNode(8);
   root->right = newNode(9);
   root->left->left = newNode(4);
   root->left->right = newNode(5);
   root->left->right->right = newNode(7);
   root->left->right->right->left = newNode(2);
   int maxlheight=maxheight(root->left);
   int maxrheight=maxheight(root->right);
   int maxlheight=maxDepth(root->left);
   int maxrheight=maxDepth(root->right);
   cout << "Maximum length cycle: " << maxlheight+maxrheight+1;
   return 0;
}

Đầu ra

Maximum length cycle: 6