IList
接口:
IList
是一个接口,定义了一种有序集合的通用 API。- 继承自
ICollection
接口和IEnumerable<T>,是所有泛型列表的基接,口它提供了对列表中元素的基本操作,如添加、删除、索引访问等。 IList
不是一个具体的集合类,而是一组实现了该接口的类的通用接口。
实例化
既然IList是接口,就不能用new关键字去直接实例化,但是可以用多态的方式去实例化,也就是用其子类(List)去实例化。
IList<string> Ilist1=new List<string>() (①)
与 List<string> list1=new List<string>() (②)
①与②区别:
①创建了一个list,但是这个list只能用到IList接口中规定那些方法,因为这些方法在List类型中实现了的,所以可以用。
②也创建了一个list,这个list可以用List类型中实现的所有方法(当然包括IList规定的那些)
推荐使用①
因为在面向对象的思想里,推荐使用接口,可以实现松耦合,有很好的扩展性,功能与具体实现很好的分离开,有利于系统的维护与重构。
List
类:
-
List
是System.Collections.Generic
命名空间中的一个具体实现类,实现了IList
接口。 -
List
是动态数组,它自动扩展以容纳任意数量的元素。 -
List
提供了对元素的高效访问和操作,支持索引、添加、删除、搜索等操作。
题解
DFS递归的方式层次遍历
- 使用递归的方式进行深度优先搜索。
DFS
方法接受两个参数:当前节点root
和当前节点所在的层级level
。- 如果当前节点为空,直接返回。
- 如果
res
中的列表数量小于当前层级level + 1
,说明当前层的列表还没有创建,因此添加一个新的空列表。 - 将当前节点的值加入到
res
中对应层级的列表中。 - 递归调用
DFS
处理左子树和右子树,层级加 1。
cs
/**
* 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 List<List<int>> res = new List<List<int>>();
public IList<IList<int>> LevelOrder(TreeNode root) {
if(root == null)
return res.ToArray();
DFS(root,0);
return res.ToArray();
}
private void DFS(TreeNode root, int level)
{
if(root == null)
return;
if(res.Count < level + 1)
{
res.Add(new List<int>());
}
res[level].Add(root.val);
DFS(root.left, level + 1);
DFS(root.right, level + 1);
}
}