LeetCode——第102题:二叉树的层次遍历

题目:

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

例如:

给定二叉树: [3,9,20,null,null,15,7],

3
/ \
9 20
/ \
15 7
返回其层次遍历结果:

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

代码:

package leetCode;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/*2018.7.25
 * 二叉树的层次遍历
 *@author dhc
 *
 */
public class OneHundredAndTwo {
    //1ms
    public static List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> re = new ArrayList<List<Integer>>();
        if (root == null) {
            return new ArrayList<>();
        }
        // 当前层结点数
        int width = 1;
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root);
        List<Integer> t = new ArrayList<Integer>();
        while (!queue.isEmpty()) {
            TreeNode tem = queue.poll();
            t.add(tem.val);
            width--;
            if (tem.left != null) {
                queue.offer(tem.left);
            }
            if (tem.right != null) {
                queue.offer(tem.right);
            }
            if (width == 0) {
                re.add(t);
                //开始想的是用clear清空t,但是后来发现清空后就只有最后一层的那些数
                t = new ArrayList<Integer>();
                //一开始的时候是想着用一个变量保存下一层的宽度,然后每层遍历完了,就把下层宽度赋值给width,后来发现这个值就是queue的当前长度
                width = queue.size();
            }
        }
        return re;
    }
    public static void main(String[] args) {
        TreeNode root = new TreeNode(1);
        TreeNode node1 = new TreeNode(2);
        TreeNode node2 = new TreeNode(3);
        TreeNode node3 = new TreeNode(4);
        TreeNode node4 = new TreeNode(5);
        TreeNode node5 = new TreeNode(6);
        root.left = node1;
        root.right = node2;
        node1.left = node3;
        node3.left = node4;
        node2.right = node5;
        List> re = levelOrder(root);
        for (int i = 0; i < re.size(); i++) {
            List tem = re.get(i);
            for (int j = 0; j < tem.size(); j++) {
                System.out.println(tem.get(j));
            }
        }
    }
}

你可能感兴趣的:(java,数据结构,leetCode)