[LeetCode] Binary Tree Level Order Traversal
A classic tree traversal problem. I share my two solutions here: BFS and DFS.
BFS:
1 vector<vector<int>> levelOrder(TreeNode *root) { 2 vector<vector<int>> levels; 3 if(!root) return levels; 4 queue<TreeNode*> toVisit; 5 toVisit.push(root); 6 int numLevelNodes = 1; 7 while(!toVisit.empty()) { 8 vector<int> level; 9 for (int i = 0; i < numLevelNodes; i++) { 10 TreeNode* node = toVisit.front(); 11 toVisit.pop(); 12 level.push_back(node -> val); 13 if(node -> left) toVisit.push(node -> left); 14 if(node -> right) toVisit.push(node -> right); 15 } 16 levels.push_back(level); 17 numLevelNodes = toVisit.size(); 18 } 19 return levels; 20 }
DFS:
1 vector<vector<int>> levelOrder(TreeNode *root) { 2 vector<vector<int>> levels; 3 if(!root) return levels; 4 int curLevel = 1; 5 bool nextLevel = true; 6 while(nextLevel) { 7 nextLevel = false; 8 vector<int> level; 9 levelTraverse(root, curLevel++, nextLevel, level); 10 levels.push_back(level); 11 } 12 return levels; 13 } 14 void levelTraverse(TreeNode* node, int curLevel, bool& nextLevel, vector<int>& level) { 15 if(!node) return; 16 if(curLevel == 1) { 17 level.push_back(node -> val); 18 if(node -> left || node -> right) nextLevel = true; 19 } 20 else { 21 levelTraverse(node -> left, curLevel - 1, nextLevel, level); 22 levelTraverse(node -> right, curLevel - 1, nextLevel, level); 23 } 24 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步