ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีค้นหาโหนดระดับคี่ที่ลึกที่สุดในไบนารีทรี
ซึ่งคล้ายกับการหาความลึกของไบนารีทรี ตรงนี้เราต้องมีเงื่อนไขอีกอย่างหนึ่งคือว่าระดับปัจจุบันเป็นเลขคี่หรือไม่
มาดูขั้นตอนการแก้ปัญหากัน
-
เริ่มต้นไบนารีทรีด้วยข้อมูลจำลอง
-
เขียนฟังก์ชันแบบเรียกซ้ำเพื่อค้นหาโหนดระดับคี่ที่ลึกที่สุดในไบนารีทรี
-
หากโหนดปัจจุบันเป็นโหนดปลายสุดและระดับเป็นคี่ ให้ส่งคืนระดับปัจจุบัน
-
มิฉะนั้นจะคืนค่าสูงสุดของโหนดด้านซ้ายและโหนดด้านขวาด้วยการเรียกฟังก์ชันแบบเรียกซ้ำ
-
-
พิมพ์โหนดระดับคี่ที่ลึกที่สุด
ตัวอย่าง
มาดูโค้ดกันเลย
#include <bits/stdc++.h> using namespace std; struct Node { int data; struct Node *left, *right; }; struct Node* newNode(int data) { struct Node* node = (struct Node*) malloc(sizeof(struct Node)); node->data = data; node->left = node->right = NULL; return node; } int oddLeafDepthInTree(struct Node *root, int level) { if (root == NULL) { return 0; } if (root->left == NULL && root->right == NULL && level % 2 == 1) { return level; } return max(oddLeafDepthInTree(root->left, level + 1), oddLeafDepthInTree(root->right, level + 1)); } int main() { struct Node* root = newNode(1); root->left = newNode(2); root->right = newNode(3); root->left->left = newNode(4); root->right->left = newNode(5); root->right->right = newNode(6); root->right->left->right = newNode(7); root->right->right->right = newNode(8); int level = 1, depth = 0; cout << oddLeafDepthInTree(root, level) << endl; return 0; }
ผลลัพธ์
หากคุณรันโค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้
3
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น