p141 二叉树的 Z 字形遍历(leetcode 103)
Posted repinkply
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了p141 二叉树的 Z 字形遍历(leetcode 103)相关的知识,希望对你有一定的参考价值。
一:解题思路
Time:O(n),Space:O(n)
二:完整代码示例 (C++版和Java版)
C++:
class Solution { public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>> result; if (root == NULL) return result; bool right2Left = false; queue<TreeNode*> q; q.push(root); while (!q.empty()) { int size = q.size(); vector<int> elem; for (int i = 0; i < size; i++) { TreeNode* node = q.front(); q.pop(); elem.push_back(node->val); if (node->left != NULL) q.push(node->left); if (node->right != NULL) q.push(node->right); } if (right2Left) reverse(elem.begin(),elem.end()); result.push_back(elem); right2Left = !right2Left; } return result; } };
Java:
class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> result=new ArrayList<>(); if(root==null) return result; boolean right2Left=false; Queue<TreeNode> q=new LinkedList<>(); q.add(root); while (!q.isEmpty()) { int size=q.size(); List<Integer> elem=new ArrayList<>(); for(int i=0;i<size;i++) { TreeNode node=q.poll(); elem.add(node.val); if(node.left!=null) q.add(node.left); if(node.right!=null) q.add(node.right); } if(right2Left) Collections.reverse(elem); result.add(elem); right2Left=!right2Left; } return result; } }
以上是关于p141 二叉树的 Z 字形遍历(leetcode 103)的主要内容,如果未能解决你的问题,请参考以下文章
二叉树构建与遍历-LeetCode 103108109(二叉树的构建,层次遍历)
LeetCode 149. 直线上最多的点数 / NC14 二叉树的之字形层序遍历 / NC37 合并区间
LeetCode 1104. 二叉树寻路/103. 二叉树的锯齿形层序遍历/ 171. Excel表列序号/ 987. 二叉树的垂序遍历