牛客題霸NC15求二叉樹的層序遍歷Java題解
阿新 • • 發佈:2020-11-25
牛客題霸NC15求二叉樹的層序遍歷Java題解
方法:利用佇列
解題思路:將節點加入到佇列中,利用佇列Queue的先進後出,依此彈出節點。如果彈出的節點有左、右子節點,則將左、右子節點加入到佇列Queue中,將每一層的節點儲存到一個ArrayList中(tmp),每一層遍歷完,將這一層的節點都加入到ArrayList<ArrayList<integer>> list 中。
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */ public class Solution { /** * * @param root TreeNode類 * @return int整型ArrayList<ArrayList<>> */ public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) { ArrayList<ArrayList<Integer>> list = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<>(); if(root!=null){ queue.add(root); } while(!queue.isEmpty()){ ArrayList<Integer> tmp = new ArrayList<>(); //儲存每一層節點 for(int i = queue.size();i>0;i--){ //遍歷當前層的節點 TreeNode node = queue.poll(); //彈出佇列中的節點 tmp.add(node.val); //將此節點加入到當前層的 ArrayList中 if(node.left!=null){ //如果左子節點不為空,則將其加入到佇列中 queue.add(node.left); } if(node.right!=null){ //如果左子節點不為空,則將其加入到佇列中 queue.add(node.right); } } list.add(tmp); //將這一層的節點加入到list中 } return list; } }