102. 二叉树的层序遍历

Problem: 102. 二叉树的层序遍历

解题方法

广度优先搜索:

  • 用队列保存需要每一层

  • 根节点入队列

    - 遍历 栈不为空

    - node = queue.Deque();

    - 左子树不为空 入队列

    - 右子树不为空 入队列

    - queue.Dequeue(node);

复杂度

时间复杂度:

添加时间复杂度, 示例: $O(n)$

空间复杂度:

添加空间复杂度, 示例: $O(n)$

Code

[]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/**

 * Definition for a binary tree node.

 * public class TreeNode {

 *     public int val;

 *     public TreeNode left;

 *     public TreeNode right;

 *     public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) {

 *         this.val = val;

 *         this.left = left;

 *         this.right = right;

 *     }

 * }

 */

public class Solution {

    public IList<IList<int>> LevelOrder(TreeNode root) {

        var res = new List<IList<int>>();

        var queue = new Queue<TreeNode>();

        if(root != null) {

            queue.Enqueue(root);

        }

        while(queue.Count != 0) {

            int size = queue.Count;

            List<int> list = new List<int>();

            while(size > 0) {

                var node = queue.Dequeue();

                if(node.left != null) {

                    queue.Enqueue(node.left);

                }

                if(node.right != null) {

                    queue.Enqueue(node.right);

                }

                list.Add(node.val);

                size--;

            }

            res.Add(list);

        }

        return res;

    }

}