内容简介:本文为LeetCode:一颗给定的二叉树,返回节点值的之子形的便利结果。即,从左到右,然后下一级别是从右到左,如此交替。例如:
本文为LeetCode: 103. Binary Tree Zigzag Level Order Traversal 的题解。
题意
一颗给定的二叉树,返回节点值的之子形的便利结果。即,从左到右,然后下一级别是从右到左,如此交替。
例如:
给定二叉树: [3,9,20,null,null,15,7]
:
3 / \ 9 20 / \ 15 7
程序将会返回之字形遍历顺序:
[ [3], [20,9], [15,7] ]
题解
对于第一层遍历,从左到右,添加到一个stack中;对于第二层遍历,pop出来的顺序是从右到左,所以要额外考虑先添加right子节点、再添加left子节点到stack中。
代码
import java.util.*; /** * https://www.robberphex.com/binary-tree-zigzag-level-order-traversal/ */ class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> levelTraversal = new ArrayList<>(); if (root == null) { return levelTraversal; } // 第level级的节点存储在curLevel中 int level = 0; Stack<TreeNode> curLevel = new Stack<>(); curLevel.push(root); // 存储下一级节点 Stack<TreeNode> nextLevel = new Stack<>(); while (!curLevel.isEmpty()) { // 遍历当前层的节点 List<Integer> traversal = new ArrayList<>(); while (!curLevel.isEmpty()) { TreeNode cur; // 对于顺向层,pop是从左到右 // 对于逆向层,pop是从右到左 cur = curLevel.pop(); if (cur == null) { continue; } if (level % 2 == 1) { nextLevel.push(cur.right); nextLevel.push(cur.left); } else { nextLevel.push(cur.left); nextLevel.push(cur.right); } traversal.add(cur.val); } if (!traversal.isEmpty()) { levelTraversal.add(traversal); } level++; curLevel = nextLevel; nextLevel = new Stack<>(); } return levelTraversal; } public static void main(String[] args) { TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); root.left.left = new TreeNode(4); root.right.right = new TreeNode(5); List<List<Integer>> res = new Solution().zigzagLevelOrder(root); System.out.println(res); // 输出 [[1], [3, 2], [4, 5]] } }
以上所述就是小编给大家介绍的《LeetCode:103. Binary Tree Zigzag Level Order Traversal》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- LeetCode:103. Binary Tree Zigzag Level Order Traversal
- Leetcode基础刷题PHP解析(103. Binary Tree Zigzag Level Order Traversal)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
黑客攻防技术宝典(第2版)
[英] Dafydd Stuttard、[英] Marcus Pinto / 石华耀、傅志红 / 人民邮电出版社 / 2012-6-26 / 99.00元
内容简介: Web应用无处不在,安全隐患如影随形。承载着丰富功能与用途的Web应用程序中布满了各种漏洞,攻击者能够利用这些漏洞盗取用户资料,实施诈骗,破坏其他系统等。近年来,一些公司的网络系统频频遭受攻击,导致用户信息泄露,造成不良影响。因此,如何确保Web应用程序的安全,已成为摆在人们眼前亟待解决的问题。 本书是Web安全领域专家的经验结晶,系统阐述了如何针对Web应用程序展开攻击与......一起来看看 《黑客攻防技术宝典(第2版)》 这本书的介绍吧!