1. 程式人生 > 實用技巧 >牛客題霸NC15求二叉樹的層序遍歷Java題解

牛客題霸NC15求二叉樹的層序遍歷Java題解

牛客題霸NC15求二叉樹的層序遍歷Java題解

https://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3?tpId=117&&tqId=34936&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking

方法:利用佇列
解題思路:將節點加入到佇列中,利用佇列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; } }