leetcode二叉樹-中等-二叉樹的層序遍歷 II
阿新 • • 發佈:2021-12-20
我的做法只是層序遍歷+reverse
這是正經做法 https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/solution/python-di-gui-jie-fa-xiang-xi-zhu-shi-yu-2dw2/
不會,我可以學;落後,我可以追趕;跌倒,我可以站起來!package binarytree.levelOrderBottom; import binarytree.untils.GenerateTreeNode; import binarytree.untils.TreeNode; import java.util.*; /** * 107. 二叉樹的層序遍歷 II * 給定一個二叉樹,返回其節點值自底向上的層序遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷) * * 例如: * 給定二叉樹 [3,9,20,null,null,15,7], * * 3 * / \ * 9 20 * / \ * 15 7 * 返回其自底向上的層序遍歷為: * * [ * [15,7], * [9,20], * [3] * ] */ public class levelOrderBottom { //偷個懶,層序遍歷 然後反轉結果集陣列 public static List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); levelOrder(root,res); Collections.reverse(res); return res; } private static void levelOrder(TreeNode root,List<List<Integer>> res ){ if(root==null){ return; } Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); while(!queue.isEmpty()){ List<Integer> list = new LinkedList<>(); int size = queue.size(); for (int i = 0; i < size; i++) { TreeNode node = queue.poll(); list.add(node.val); if(node.left!=null){ queue.add(node.left); } if(node.right!=null){ queue.add(node.right); } } if(list.size()!=0){ res.add(list); } } } public static void main(String[] args) { Integer[] nums = {1, 2, 3, 4, 5, 6, 7}; TreeNode treeNode = GenerateTreeNode.generateTreeNode(nums); List<List<Integer>> lists = levelOrderBottom(treeNode); System.out.println(); } }