1. 程式人生 > 實用技巧 >每天1題演算法題(2)-二叉樹的層序遍歷

每天1題演算法題(2)-二叉樹的層序遍歷

給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。

示例:
二叉樹:[3,9,20,null,null,15,7],

3
/ \
9 20
/ \
15 7
返回其層次遍歷結果:

[
[3],
[9,20],
[15,7]
]

解答

1.使用廣度優先演算法,加上level標記當前層

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        // queue先進先出,每次放入到尾部,每次在首部移出
        List<List<Integer>> response = new
ArrayList<List<Integer>>(); if(root == null) { return response; } Queue<TreeNode> queue = new LinkedList(); queue.offer(root); while(!queue.isEmpty()) { int currentLevelSize = queue.size(); List<Integer> levelTreeNodes = new
ArrayList(); for(int i=0; i<currentLevelSize; i++) { TreeNode treeNode = queue.poll(); if(treeNode.left != null) { queue.offer(treeNode.left); } if(treeNode.right != null) { queue.offer(treeNode.right); } levelTreeNodes.add(treeNode.val); } response.add(levelTreeNodes); }
return response; } }

classSolution{ publicList<List<Integer>>levelOrder(TreeNoderoot){ //queue先進先出,每次放入到尾部,每次在首部移出 List<List<Integer>>response=newArrayList<List<Integer>>(); if(root==null){ returnresponse; } Queue<TreeNode>queue=newLinkedList(); queue.offer(root); while(!queue.isEmpty()){ intcurrentLevelSize=queue.size(); List<Integer>levelTreeNodes=newArrayList(); for(inti=0;i<currentLevelSize;i++){ TreeNodetreeNode=queue.poll(); if(treeNode.left!=null){ queue.offer(treeNode.left); } if(treeNode.right!=null){ queue.offer(treeNode.right); }
levelTreeNodes.add(treeNode.val); } response.add(levelTreeNodes); } returnresponse; } }