[LeetCode]103. Binary Tree Zigzag Level Order Traversal--二叉树之字形遍历
来源:互联网 发布:亿捷数据管家 编辑:程序博客网 时间:2024/05/21 08:53
103. Binary Tree Zigzag Level Order Traversal
Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next level and alternate between).For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
分析:简单分析就可以发现,每行都是先进后出,所以很显然需要用到栈。但需要注意一点,对于每一行,左右孩子入栈的顺序不同,需要专门标记一下,奇数行先左孩子后右孩子入栈,偶数行先右孩子后左孩子入栈。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>> result; if(root == NULL) return result; stack<TreeNode*>current, next; current.push(root); vector<int> oneLayer; bool flag = true; while(!current.empty()){ TreeNode* pCur = current.top(); current.pop(); oneLayer.push_back(pCur->val); // 需要确定左右子树入栈的顺序 // 用flag标记 if(flag){ if(pCur->left) next.push(pCur->left); if(pCur->right) next.push(pCur->right); }else{ if(pCur->right) next.push(pCur->right); if(pCur->left) next.push(pCur->left); } if(current.empty()){ result.push_back(oneLayer); oneLayer.clear(); // 清空 swap(current, next); // 直接交换 flag = !flag; // flag切换 } } return result; }};
也可以使用《剑指offer》中解法,思想是一样的,代码略微不同。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>> result; if(!root) return result; stack<TreeNode*> s[2]; int current = 0; int next = 1; s[current].push(root); vector<int> v; while(!s[current].empty() || !s[next].empty()){ TreeNode* pCur = s[current].top(); s[current].pop(); v.push_back(pCur->val); if(current == 0){ if(pCur->left) s[next].push(pCur->left); if(pCur->right) s[next].push(pCur->right); }else{ if(pCur->right) s[next].push(pCur->right); if(pCur->left) s[next].push(pCur->left); } if(s[current].empty()){ current = 1 - current; next = 1 - next; result.push_back(v); v.clear(); } } return result; }};
阅读全文
0 0
- LeetCode 103. Binary Tree Zigzag Level Order Traversal(二叉树之字形遍历)
- [LeetCode]103. Binary Tree Zigzag Level Order Traversal--二叉树之字形遍历
- Binary Tree Zigzag Level Order Traversal 之字形遍历二叉树
- Leetcode 103. Binary Tree Zigzag Level Order Traversal 二叉树Zigzag遍历 解题报告
- leetcode解题之103. Binary Tree Zigzag Level Order Traversal java版(之字形打印二叉树)
- 103.leetcode Binary Tree Zigzag Level Order Traversal(medium)[二叉树层次遍历 栈]
- (二叉树z字形层次遍历)LeetCode#103. Binary Tree Zigzag Level Order Traversal
- 【LeetCode】Binary Tree Zigzag Level Order Traversal--- 层序遍历二叉树
- LeetCode(Binary Tree Level Order Traversal, 2,Zigzag)二叉树的层次遍历
- LeetCode OJ 之 Binary Tree Zigzag Level Order Traversal (二叉树的曲线层次遍历)
- Leetcode 103 ,Binary Tree Zigzag Level Order Traversal(二叉树Z形分层遍历)
- 【LeetCode笔记】Binary Tree Zigzag Level Order Traversal 二叉树Z字形遍历
- 【LeetCode】Binary Tree Zigzag Level Order Traversal 二叉树的锯齿形层次遍历
- [leetcode-二叉树层次遍历并统计每层节点数]--103. Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal 二叉树按层遍历,zigzag输出@LeetCode
- 103. Binary Tree Zigzag Level Order Traversal | 输出二叉树层次遍历次序
- Binary Tree Level Order Traversal 分层遍历二叉树@LeetCode
- Leetcode Binary Tree Level Order Traversal 二叉树分层遍历
- Unity 碰撞器(Collider)与触发器(Trigger)
- 操作符标记
- ES8
- Drools 技术指南
- jmeter录制HTTPS请求的APP
- [LeetCode]103. Binary Tree Zigzag Level Order Traversal--二叉树之字形遍历
- java基础复习--复习总结9
- Doctype作用
- VC输出文本信息到调试器
- 一个轻便易用的消息队列
- 抽象类、接口与多态相关注意要点
- 设计模式之中介者模式
- spring 项目加载完立刻执行
- 二叉树的学习(四种遍历方法,搜索,插入,删除等)