每天1題演算法題(2)-二叉樹的層序遍歷
阿新 • • 發佈:2020-09-17
給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。
示例:
二叉樹:[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 = newclassSolution{ 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); }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 = newArrayList(); 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; } }
levelTreeNodes.add(treeNode.val); } response.add(levelTreeNodes); } returnresponse; } }