Leetcode-Binary Tree Level Order Traversal

来源:互联网 发布:淘宝上水果能买吗 编辑:程序博客网 时间:2024/05/23 11:47

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3   / \  9  20    /  \   15   7

return its level order traversal as:

[  [3],  [9,20],  [15,7]]
分析:二叉树的层次遍历,用队列实现

AC代码:

<pre name="code" class="java">import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;public class Solution {    public List<List<Integer>> levelOrder(TreeNode root) {        List<List<Integer>> answerList = new ArrayList<List<Integer>>();Queue<TreeNode> q = new LinkedList<TreeNode>();TreeNode nextLevelStarter;q.add(root);        if( root == null )            return answerList;while( !q.isEmpty() ){TreeNode currentNode = q.peek();nextLevelStarter = null;List<Integer> thisLevelList = new ArrayList<Integer>();//find nextLevelStartwhile( q.peek() != nextLevelStarter && q.isEmpty() == false ){currentNode = q.remove();if( nextLevelStarter == null ){if( currentNode.left != null )nextLevelStarter = currentNode.left;else if( currentNode.right != null )nextLevelStarter = currentNode.right;}//add to the thisLevelListthisLevelList.add(currentNode.val);if( currentNode.left != null )q.add(currentNode.left);if( currentNode.right != null )q.add(currentNode.right);}answerList.add(thisLevelList);}return answerList;    }}


说明:

peek()函数:返回队列头但不删除队列头;

remove()函数:返回队列头并且删除队列头。

参考链接:

http://www.tuicool.com/articles/Evqyemf


0 0