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

โหนดลีฟด้านซ้ายที่ลึกที่สุดในไบนารีทรีใน C ++


ในบทช่วยสอนนี้ เราจะค้นหาโหนดลีฟที่ลึกที่สุดในไบนารีทรี มาดูไบนารีทรีกัน

   A
      B    C
D       E       F
                     G

มาดูขั้นตอนการแก้ปัญหากัน

  • เขียน Node struct ด้วย char, left และ right pointers

  • เริ่มต้นไบนารีทรีด้วยข้อมูลจำลอง

  • เขียนฟังก์ชันแบบเรียกซ้ำเพื่อค้นหาโหนดด้านซ้ายที่ลึกที่สุดในฟังก์ชันไบนารี ต้องใช้โหนดรูทอาร์กิวเมนต์สามโหนด isLeftNode และตัวชี้ผลลัพธ์เพื่อเก็บโหนดที่ลึกที่สุด

  • หากโหนดปัจจุบันเหลืออยู่และเป็นโหนดปลายสุด ให้อัปเดตโหนดผลลัพธ์ด้วยโหนดปัจจุบัน

  • เรียกฟังก์ชันแบบเรียกซ้ำบนทรีย่อยด้านซ้าย

  • เรียกฟังก์ชันแบบเรียกซ้ำบนแผนผังย่อยด้านขวา

  • หากโหนดผลลัพธ์เป็นโมฆะ แสดงว่าไม่มีโหนดใดที่ตรงตามเงื่อนไขของเรา

  • หรือพิมพ์ข้อมูลในโหนดผลลัพธ์

ตัวอย่าง

มาดูโค้ดกันเลย

#include <bits/stdc++.h>
using namespace std;
struct Node {
   char data;
   struct Node *left, *right;
};
Node *addNewNode(char data) {
   Node *newNode = new Node;
   newNode->data = data;
   newNode->left = newNode->right = NULL;
   return newNode;
}
void getDeepestLeftLeafNode(Node *root, bool isLeftNode, Node **resultPointer) {
   if (root == NULL) {
      return;
   }
   if (isLeftNode && !root->left && !root->right) {
      *resultPointer = root;
      return;
   }
   getDeepestLeftLeafNode(root->left, true, resultPointer);
   getDeepestLeftLeafNode(root->right, false, resultPointer);
}
int main() {
   Node* root = addNewNode('A');
   root->left = addNewNode('B');
   root->right = addNewNode('C');
   root->left->left = addNewNode('D');
   root->right->left = addNewNode('E');
   root->right->right = addNewNode('F');
   root->right->left->right = addNewNode('G');
   Node *result = NULL;
   getDeepestLeftLeafNode(root, false, &result);
   if (result) {
      cout << "The deepest left child is " << result->data << endl;
   }
   else {
      cout << "There is no left leaf in the given tree" << endl;
   }
   return 0;
}

ผลลัพธ์

หากคุณรันโปรแกรมข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้

The deepest left child is D

บทสรุป

หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น