การท่องต้นไม้ N-ary แบบ Level Order (N-ary Tree Level Order Traversal)
ให้ต้นไม้ N-ary (โหนดแต่ละตัวมีลูกได้หลายตัว) ทำ level order traversal คืนค่าเป็นลิสต์ของลิสต์ค่าแต่ละระดับ
ตัวอย่าง: [1,null,3,2,4,null,5,6] → [[1],[3,2,4],[5,6]]
ขั้นตอนการแก้ปัญหา (BFS)
- สร้าง
ans(vector of vector) - ถ้า root null คืนค่า ans ว่าง
- คิว
qใส่ root - วนในขณะที่คิวไม่ว่าง:
sz = q.size()- สร้าง
tempเก็บค่าระดับนี้ - วน
szรอบ:- นำ
currออกจากคิว - เพิ่ม
curr.valเข้าtemp - ใส่ลูกทั้งหมดของ
currเข้าคิว
- นำ
- เพิ่ม
tempเข้าans
- คืนค่า
ans
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) { val = _val; }
Node(int _val, vector<Node*> _children) { val = _val; children = _children; }
};
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>> ans;
if (!root) return ans;
queue<Node*> q;
q.push(root);
while (!q.empty()) {
int sz = q.size();
vector<int> temp;
while (sz--) {
Node* curr = q.front(); q.pop();
temp.push_back(curr->val);
for (Node* child : curr->children) q.push(child);
}
ans.push_back(temp);
}
return ans;
}
};
อินพุทและเอาต์พุทตัวอย่าง
Input: [1,null,3,2,4,null,5,6]
Output: [[1],[3,2,4],[5,6]]