Binary Tree Zigzag Level Order Traversal,z字形遍历二叉树,得到每层访问的节点值。
问题描述:
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] ]
算法分析:和前面问题类似。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | public class BinaryTreeZigzagLevelOrderTraversal { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<Integer> list = new ArrayList<>(); List<List<Integer>> res = new ArrayList<>(); if (root == null ) { return res; } Stack<TreeNode> s1 = new Stack<>(); Stack<TreeNode> s2 = new Stack<>(); s1.push(root); while (!s1.isEmpty() || !s2.isEmpty()) { while (!s1.isEmpty()) { TreeNode temp = s1.pop(); if (temp.left != null ) { s2.push(temp.left); } if (temp.right != null ) { s2.push(temp.right); } list.add(temp.val); } if (list.size() != 0) res.add(list); list = new ArrayList<>(); while (!s2.isEmpty()) { TreeNode temp = s2.pop(); if (temp.right != null ) { s1.push(temp.right); } if (temp.left != null ) { s1.push(temp.left); } list.add(temp.val); } if (list.size() != 0) res.add(list); list = new ArrayList<>(); } return res; } } |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步