Binary Tree Level Order Traversal

来源:互联网 发布:cloudify 教程 ubuntu 编辑:程序博客网 时间:2024/05/22 10:42

Description:

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

问题描述:

层序遍历二叉树,将每层的元素按List的形式存储。

Ex:

3
/ \
9 20
/ \
15 7

print:

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

解法一:

思路:

这道题用辅助队列Queue queue 存储树节点,用levelNum = queue.size();存储每层结点的个数,在外循环队列非空的情况下
内循环中:

for(int i = 0; i < levelNum; i++){                if(queue.peek().left != null) queue.offer(queue.peek().left);                if(queue.peek().right != null) queue.offer(queue.peek().right);                sublist.add(queue.poll().val);            }

peek().left查左子树的结点,不为空,压入队列queue.offer(queue.peek().left); 右子树同理。然后在取出并移除队列中的元素到subList

Code:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public List<List<Integer>> levelOrder(TreeNode root) {        Queue<TreeNode> queue = new LinkedList<TreeNode>();        List<List<Integer>> wrapList = new LinkedList<List<Integer>>();        if(root == null) return wrapList;        queue.offer(root);        while(!queue.isEmpty()){            int levelNum = queue.size();            List<Integer> sublist = new LinkedList<Integer>();            for(int i = 0; i < levelNum; i++){                if(queue.peek().left != null) queue.offer(queue.peek().left);                if(queue.peek().right != null) queue.offer(queue.peek().right);                sublist.add(queue.poll().val);            }            wrapList.add(sublist);        }        return wrapList;    }}
0 0
原创粉丝点击