สมมติว่าเรามีต้นไม้ไบนารี เราต้องหาความลึกขั้นต่ำของต้นไม้นั้น ตามที่เราทราบความลึกต่ำสุดคือจำนวนโหนดตามเส้นทางที่สั้นที่สุดจากโหนดรากลงไปที่โหนดปลายสุดที่ใกล้ที่สุด
ดังนั้นหากอินพุตเป็นแบบ
แล้วผลลัพธ์จะเป็น 2
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดอาร์เรย์ aa ของโหนดต้นไม้
-
ใส่ root ที่ท้าย aa
-
กำหนด ak อาร์เรย์อื่นของโหนดต้นไม้
-
ระดับ :=0
-
ถ้ารูทเป็นโมฆะ −
-
คืนค่า 0
-
-
ในขณะที่ขนาดของ aa ไม่เท่ากับ 0 ให้ทำ −
-
เคลียร์อาร์เรย์ ak
-
(เพิ่มระดับขึ้น 1)
-
สำหรับโหนด a ทั้งหมดใน aa -
-
ถ้า (ซ้ายของ a เป็นโมฆะ) และ (ทางขวาของ a เป็นโมฆะ) แล้ว −
-
ระดับผลตอบแทน
-
ออกจากวง
-
-
ถ้าเหลือของ a ไม่เป็นโมฆะ −
-
แทรกด้านซ้ายของ a ที่ส่วนท้ายของ ak
-
-
ถ้าสิทธิ์ของ a ไม่เป็นโมฆะ −
-
แทรกด้านขวาของ a ที่ส่วนท้ายของ ak
-
-
-
aa :=ak
-
-
คืนค่า 0
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; class TreeNode{ public: int val; TreeNode *left, *right; TreeNode(int data){ val = data; left = NULL; right = NULL; } }; void insert(TreeNode **root, int val){ queue<TreeNode*> q; q.push(*root); while(q.size()){ TreeNode *temp = q.front(); q.pop(); if(!temp->left){ if(val != NULL) temp->left = new TreeNode(val); else temp->left = new TreeNode(0); return; } else{ q.push(temp->left); } if(!temp->right){ if(val != NULL) temp->right = new TreeNode(val); else temp->right = new TreeNode(0); return; } else{ q.push(temp->right); } } } TreeNode *make_tree(vector<int> v){ TreeNode *root = new TreeNode(v[0]); for(int i = 1; i<v.size(); i++){ insert(&root, v[i]); } return root; } class Solution { public: int minDepth(TreeNode* root) { vector<TreeNode*> aa; aa.push_back(root); vector<TreeNode*> ak; int level = 0; if (root == NULL || root->val == 0) { return 0; } while (aa.size() != 0) { ak.clear(); level++; for (TreeNode* a : aa) { if ((a->left == NULL || a->left->val == 0)&& (a->right == NULL || a->right->val == 0)) { return level; break; } if (a->left != NULL) { ak.push_back(a->left); } if (a->right != NULL) { ak.push_back(a->right); } } aa = ak; } return 0; } }; main(){ Solution ob; vector<int&g; v = {3,9,20,NULL,NULL,15,7}; TreeNode *root = make_tree(v); cout << (ob.minDepth(root)); }
อินพุต
{3,9,20,NULL,NULL,15,7}
ผลลัพธ์
2