LeetCode: 103_Binary Tree Zigzag Level Order Traversal | 二叉树Zigzag层次遍历 | Medium
本题也属于层次遍历的变形,不同之处在于其遍历的方法是交替进行的,形成一个ZigZag的曲线形式,如下:
代码如下:
1 struct TreeNode { 2 int val; 3 TreeNode* left; 4 TreeNode* right; 5 TreeNode(int x): val(x), left(NULL),right(NULL) {} 6 }; 7 8 void Swap(vector<int> &ivec) 9 { 10 int temp = 0; 11 int len = ivec.size(); 12 for (int i = 0; i < len/2; i ++) { 13 temp = ivec.at(i); 14 ivec.at(i) = ivec.at(len-1-i); 15 ivec.at(len-1-i) = temp; 16 } 17 } 18 19 vector<vector <int> > zigzagLevelOrder(TreeNode *root) 20 { 21 vector<vector<int> > tree_vector; 22 vector<int> ivec; 23 queue<TreeNode *> tree_queue; 24 if (NULL == root) 25 return tree_vector; 26 27 tree_queue.push(root); 28 tree_queue.push(NULL); 29 int nLevelCount = 1; 30 while (true) { 31 TreeNode *pTemp = tree_queue.front(); 32 tree_queue.pop(); 33 if (pTemp == NULL) { 34 if (nLevelCount%2 == 0) { //if the num of level is odd, swap the ivec; 35 Swap(ivec); 36 } 37 tree_vector.push_back(ivec); 38 ivec.clear(); 39 if (tree_queue.empty()) 40 break; 41 tree_queue.push(NULL); 42 nLevelCount ++; 43 } 44 else { 45 ivec.push_back(pTemp->val); 46 if (pTemp->left) 47 tree_queue.push(pTemp->left); 48 if (pTemp->right) 49 tree_queue.push(pTemp->right); 50 } 51 } 52 return tree_vector; 53 }
作者:公众号「Linux云计算网络」,专注于Linux、云计算、网络领域技术干货分享
出处:https://www.cnblogs.com/bakari/p/4126666.html
本站使用「署名 4.0 国际」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?