public IList<IList<int>> LevelOrder(TreeNode root)
{
var nodes = new List<IList<int>>();
if (root == null)
{
return nodes;
}
var queue = new Queue<TreeNode>();
queue.Enqueue(root);
while (queue.Count > 0)
{
int currentLevelSize = queue.Count;
var layerNodes = new List<int>();
int index = 0;
while (index < currentLevelSize)
{
var node = queue.Peek();
queue.Dequeue();
layerNodes.Add(node.val);
if (node.left != null)
{
queue.Enqueue(node.left);
}
if (node.right != null)
{
queue.Enqueue(node.right);
}
index++;
}
nodes.Add(layerNodes);
}
return nodes;
}