135.Binary Tree Zigzag Level Order Traversal
来源:互联网 发布:知乎坚持跑步样貌变化 编辑:程序博客网 时间:2024/05/20 20:21
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,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7]]
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,
* 第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
* 借助两个栈来实现。stack1保存当前正在打印层的结点,Stack2保存stack2正在打印出的结点的孩子结点。
* 当stack1为奇数层时则先放其左孩子,为偶数层时则先放其右孩子。
* 整个循环结束的条件是stack1为空。
/** * 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印, * 第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 * 借助两个栈来实现。stack1保存当前正在打印层的结点,Stack2保存stack2正在打印出的结点的孩子结点。 * 当stack1为奇数层时则先放其左孩子,为偶数层时则先放其右孩子。 * 整个循环结束的条件是stack1为空。 */public List<List<Integer> > zigzagLevelOrder(TreeNode pRoot) {List<List<Integer> > result = new ArrayList<List<Integer> >();if(pRoot == null){return result;}/*stack1保存当前正在打印层的结点,Stack2保存stack2正在打印出的结点的孩子结点。*/Stack<TreeNode> stack1 = new Stack<TreeNode>();Stack<TreeNode> stack2 = new Stack<TreeNode>();ArrayList<Integer> list;TreeNode node ;boolean isEnven = false;//表示当前层是否为偶数层/*初始化stack1为根结点*/stack1.push(pRoot);/*循环直到某一层需要打印的结点个数为0*/while(!stack1.isEmpty()){list = new ArrayList<Integer>();/*循环打印出当前层的所有结点*/while(!stack1.isEmpty()){node = stack1.pop();list.add(node.val);if(isEnven){//偶数层则先放它的右孩子if(node.right!=null){stack2.add(node.right);}if(node.left!=null){stack2.add(node.left);}}else{//奇数层先放它的左孩子if(node.left!=null){stack2.add(node.left);}if(node.right!=null){stack2.add(node.right);}}}//结束里层while循环/*把当前层的打印结果加到之前的结果中*/result.add(list);stack1.addAll(stack2);stack2.clear();/*偶数层变奇数层,奇数层变偶数层*/if(isEnven){isEnven = false;}else{isEnven = true;}}return result; }
0 0
- 135.Binary Tree Zigzag Level Order Traversal
- LeetCode: Binary Tree Zigzag Level Order Traversal
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Zigzag Level Order Traversal
- [Leetcode] Binary Tree Zigzag Level Order Traversal
- Leetcode: Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Zigzag Level Order Traversal
- [LeetCode] Binary Tree Zigzag Level Order Traversal
- [Leetcode] Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- 【leetcode】Binary Tree Zigzag Level Order Traversal
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- [Leetcode]Binary Tree Zigzag Level Order Traversal
- [leetcode]Binary Tree Zigzag Level Order Traversal
- Leetcode: Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- linux虚拟机无法连接到Win7网络
- 哈夫曼树实现
- mongodb实现复杂报表查询
- AsynTask的使用
- demo_代码注册广播接受者_Service
- 135.Binary Tree Zigzag Level Order Traversal
- web.xml中servlet ,filter ,listener ,interceptor的作用与区别
- 抓取前端渲染的页面
- Android智能设备蓝牙连接(BLE)
- Fragment的跳转问题
- python2下的编码问题(Non-Ascii chararcter)
- 用Gradle 构建你的android程序
- Ural 1081 Binary Lexicographic Sequence
- iOS开发之直播App流程介绍,直播资料收集汇总,视频推流,视频拉流,SMTP、RTMP、HLS、 PLPlayerKit