一個後端要具備的好習慣
阿新 • • 發佈:2022-03-15
102. 二叉樹的層序遍歷
Solution
思路:搞一個深度,然後放到對應的層次裡。這裡開List
巢狀的時候有點坑,不過根據list
的容量大小和層次的高度關係,來進行建立。這裡的NewNode
不能共用。題解程式碼是 用for迴圈搞出來那一層的。普通的BFS
是彈出一個。見下面程式碼二。
///程式碼一 class Solution { public List<List<Integer>> levelOrder(TreeNode root) { if (root == null) return new ArrayList<>(); List<List<Integer>> lists = new ArrayList<>(); Queue<NewNode> queue = new ArrayDeque<>(); NewNode newNode = new NewNode(); newNode.node = root; newNode.deep = 0; queue.add(newNode); while (!queue.isEmpty()) { NewNode t = queue.remove(); if (lists.size() <= t.deep) { lists.add(new ArrayList<>()); } lists.get(t.deep).add(t.node.val); if (t.node.left != null) { NewNode l = new NewNode(); l.node = t.node.left; l.deep = t.deep + 1; queue.add(l); } if (t.node.right != null) { NewNode r = new NewNode(); r.node = t.node.right; r.deep = t.deep + 1; queue.add(r); } } return lists; } } class NewNode { TreeNode node; int deep; }
//程式碼二 class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> lists = new ArrayList<>(); if (root == null) return lists; Queue<TreeNode> queue = new ArrayDeque<>(); queue.add(root); while (!queue.isEmpty()) { List<Integer> level = new ArrayList<>(); int sz = queue.size(); for (int i = 0; i < sz; i++) { TreeNode node = queue.remove(); level.add(node.val); if (node.left != null) { queue.add(node.left); } if (node.right != null) { queue.add(node.right); } } lists.add(level); } return lists; } }