LeetCode:Binary Tree Level Order Traversal I II
LeetCode:Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
] 本文地址
队列辅助层序遍历,队列中插入NULL作为层与层之间的间隔,注意处理队列里最后的NULL时,不能再把它入队列以免形成死循环
1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<vector<int> > levelOrder(TreeNode *root) { 13 // IMPORTANT: Please reset any member data you declared, as 14 // the same Solution instance will be reused for each test case. 15 vector<vector<int> >res; 16 if(root == NULL)return res; 17 queue<TreeNode*> myqueue; 18 myqueue.push(root); 19 myqueue.push(NULL);//NULL是层与层之间间隔标志 20 vector<int> level; 21 while(myqueue.empty() == false) 22 { 23 TreeNode *p = myqueue.front(); 24 myqueue.pop(); 25 if(p != NULL) 26 { 27 level.push_back(p->val); 28 if(p->left)myqueue.push(p->left); 29 if(p->right)myqueue.push(p->right); 30 } 31 else 32 { 33 res.push_back(level); 34 if(myqueue.empty() == false) 35 { 36 level.clear(); 37 myqueue.push(NULL); 38 } 39 } 40 } 41 return res; 42 } 43 };
LeetCode:Binary Tree Level Order Traversal II
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7] [9,20], [3], ]
和上一题差不多,只是需要把最后遍历结果数组翻转一下
1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<vector<int> > levelOrderBottom(TreeNode *root) { 13 // IMPORTANT: Please reset any member data you declared, as 14 // the same Solution instance will be reused for each test case. 15 vector<vector<int> >res; 16 if(root == NULL)return res; 17 queue<TreeNode*> myqueue; 18 myqueue.push(root); 19 myqueue.push(NULL);//NULL是层与层之间间隔标志 20 vector<int> level; 21 while(myqueue.empty() == false) 22 { 23 TreeNode *p = myqueue.front(); 24 myqueue.pop(); 25 if(p != NULL) 26 { 27 level.push_back(p->val); 28 if(p->left)myqueue.push(p->left); 29 if(p->right)myqueue.push(p->right); 30 } 31 else 32 { 33 res.push_back(level); 34 if(myqueue.empty() == false) 35 { 36 level.clear(); 37 myqueue.push(NULL); 38 } 39 } 40 } 41 reverse(res.begin(), res.end()); 42 return res; 43 } 44 };
【版权声明】转载请注明出处:http://www.cnblogs.com/TenosDoIt/p/3440542.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异