Para passagem de ordem de nível, por que essa exceção ocorre? A seguinte exceção ocorre:
Não é possível converter implicitamente o tipo '
System.Collections.Generic.List<System.Collections.Generic.List<int>>
' em 'System.Collections.Generic.IList<System.Collections.Generic.IList<int>>
'. Existe uma conversão explícita (falta um elenco?)
public IList<IList<int>> LevelOrder(TreeNode root)
{
var result = new List<List<int>>();
var que = new Queue<TreeNode>();
//if(root==null) return result;
que.Enqueue(root);
while(que.Count!=0)
{
int n = que.Count;
var subList = new List<int>();
for(int i=0;i<n;i++)
{
if(que.Peek().left!=null)
que.Enqueue(que.Peek().left);
if(que.Peek().right!=null)
que.Enqueue(que.Peek().right);
subList.Add(que.Dequeue().val);
}
result.Add(subList);
}
return result;
}
Basta alterar a declaração do seu resultado para List<IList<int>>
.
List<T>
implementa IList<T>
, mas List<List<T>>
não implementa IList<IList<int>>
. Os parâmetros genéricos não são covariantes ou contravariantes, a menos que definidos dessa forma e IList<T>
não são, portanto, o tipo deve corresponder exatamente.
public IList<IList<int>> LevelOrder(TreeNode root)
{
var result = new List<IList<int>>();
var que = new Queue<TreeNode>();
//if(root==null) return result;
que.Enqueue(root);
while (que.Count != 0)
{
int n = que.Count;
var subList = new List<int>();
for (int i = 0; i < n; i++)
{
if (que.Peek().left != null)
que.Enqueue(que.Peek().left);
if (que.Peek().right != null)
que.Enqueue(que.Peek().right);
subList.Add(que.Dequeue().val);
}
result.Add(subList);
}
return result;
}
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras