标签:ISE inf 空间 image sha dao 打印 tmp int
DFS层次遍历,设置层数n,在node中按层数创建该层的数组,dfs时每层加入该层对应数组。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { List<List<Integer>> res = new ArrayList(); public List<List<Integer>> levelOrder(TreeNode root) { level(root,0); return res; } public void level(TreeNode root,int n){ if (root != null){ if (res.size() <= n) res.add(new ArrayList()); res.get(n).add(root.val); level(root.left,n+1); level(root.right,n+1); } } }
时间复杂度O(n),空间复杂度O(n)
BFS层次遍历
BFS 循环: 当队列 queue 为空时跳出;
1. 新建一个临时列表 tmp ,用于存储当前层打印结果;
2. 当前层打印循环: 循环次数为当前层节点数(即队列 queue 长度);
2.1 出队: 队首元素出队,记为 node;
2.2 打印: 将 node.val 添加至 tmp 尾部;
2.3 添加子节点: 若 node 的左(右)子节点不为空,则将左(右)子节点加入队列 queue ;
3. 将当前层结果 tmp 添加入 res 。
class Solution { public List<List<Integer>> levelOrder(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); List<List<Integer>> res = new ArrayList<>(); if(root != null) queue.add(root); while(!queue.isEmpty()) { List<Integer> tmp = new ArrayList<>(); for(int i = queue.size(); i > 0; i--) { TreeNode node = queue.poll(); tmp.add(node.val); if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); } res.add(tmp); } return res; } }
参考:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/solution/mian-shi-ti-32-ii-cong-shang-dao-xia-da-yin-er-c-5/
时间复杂度O(n),空间复杂度O(n)
剑指 Offer 32 - II. 从上到下打印二叉树 II
标签:ISE inf 空间 image sha dao 打印 tmp int
原文地址:https://www.cnblogs.com/zccfrancis/p/14391241.html