Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C ++ เพื่อตรวจสอบว่า Binary Tree ที่กำหนดนั้นเป็น Binary Tree แบบเต็มหรือไม่


ให้ต้นไม้ไบนารี ภารกิจคือตรวจสอบว่าเป็นต้นไม้ไบนารีแบบเต็มหรือไม่ Binary Tree จะเรียกว่า Full Binary Tree หากทุกโหนดมีลูกเป็นศูนย์หรือสองคน

ตัวอย่าง

อินพุต-1

โปรแกรม C ++ เพื่อตรวจสอบว่า Binary Tree ที่กำหนดนั้นเป็น Binary Tree แบบเต็มหรือไม่

ผลลัพธ์:

1

คำอธิบาย: ทุกโหนดยกเว้นโหนดปลายสุดมีลูกสองคน ดังนั้นจึงเป็นต้นไม้ไบนารีแบบเต็ม

อินพุต-2:

โปรแกรม C ++ เพื่อตรวจสอบว่า Binary Tree ที่กำหนดนั้นเป็น Binary Tree แบบเต็มหรือไม่

ผลลัพธ์:

0

คำอธิบาย: โหนด 2 มีลูกเพียงคนเดียว ดังนั้นจึงไม่ใช่ไบนารีทรีแบบเต็ม

แนวทางในการแก้ปัญหานี้

ในการตรวจสอบว่าไบนารีทรีที่กำหนดเต็มหรือไม่ เราสามารถตรวจซ้ำสำหรับทรีย่อยด้านซ้ายและทรีย่อยด้านขวาได้

  • ป้อน Binary Tree ที่กำหนดซึ่งมีโหนดและโหนดย่อย
  • ฟังก์ชันบูลีน isFullBinaryTree(Node*root) รับโหนดรูทเป็นอินพุตและคืนค่า True หากเป็นไบนารีทรีเต็ม มิฉะนั้นจะเป็นเท็จ
  • ในเงื่อนไขพื้นฐาน หากรูทโหนดเป็น NULL หรือว่าง ให้คืนค่า True
  • หากทรีย่อยด้านซ้ายและทรีย่อยด้านขวาเป็น NULL หรือว่างเปล่า ให้คืนค่า True
  • ตอนนี้ ให้เราตรวจสอบแบบวนซ้ำสำหรับทรีย่อยด้านซ้ายและทรีย่อยด้านขวา แล้วส่งคืนผลลัพธ์

ตัวอย่าง

#include<iostream>
using namespace std;
struct treenode {
   int data;
   treenode * left;
   treenode * right;
};
struct treenode * createNode(int d) {
   struct treenode * root = new treenode;
   root -> data = d;
   root -> left = NULL;
   root -> right = NULL;
   return root;
}
bool isFullBinaryTree(struct treenode * root) {
   if (root == NULL) {
      return true;
   }
   if (root -> left == NULL and root -> right == NULL) {
      return true;
   } else if (root -> left and root -> right) {
      return (isFullBinaryTree(root -> left) and isFullBinaryTree(root -> right));
   }
   return false;
}
int main() {
   struct treenode * root = NULL;
   root = createNode(1);
   root -> left = createNode(2);
   root -> right = createNode(3);
   root -> left -> right = createNode(4);
   root -> left -> left = createNode(5);
   root -> right -> left = createNode(6);
   if (isFullBinaryTree(root)) {
      cout << "1" << endl;
   } else {
      cout << "0" << endl;
   }
   return 0;
}

การเรียกใช้โค้ดด้านบนจะสร้างผลลัพธ์เป็น

ผลลัพธ์

0

คำอธิบาย: เนื่องจากโหนดปลายสุดทั้งหมดในไบนารีทรีที่กำหนดไม่มีโหนดลูก โหนดนี้จึงไม่ใช่ทรีไบนารีแบบเต็ม เราจะได้ผลลัพธ์เป็น 0