C# IList 与List区别&二叉树的层序遍历

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 类:

  • ListSystem.Collections.Generic 命名空间中的一个具体实现类,实现了 IList 接口。
  • List 是动态数组,它自动扩展以容纳任意数量的元素。
  • List 提供了对元素的高效访问和操作,支持索引、添加、删除、搜索等操作。

题解

DFS递归的方式层次遍历

  • 使用递归的方式进行深度优先搜索。
  • DFS 方法接受两个参数:当前节点 root 和当前节点所在的层级 level
  • 如果当前节点为空,直接返回。
  • 如果 res 中的列表数量小于当前层级level + 1,说明当前层的列表还没有创建,因此添加一个新的空列表。
  • 将当前节点的值加入到 res 中对应层级的列表中。
  • 递归调用 DFS 处理左子树和右子树,层级加 1。
/**
 * 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);
    }
}

相关推荐

  1. C# IList List区别&

    2023-12-06 22:42:03       38 阅读
  2. 102.

    2023-12-06 22:42:03       31 阅读
  3. 107. II

    2023-12-06 22:42:03       35 阅读
  4. 102.

    2023-12-06 22:42:03       30 阅读
  5. leetcode 102.

    2023-12-06 22:42:03       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-06 22:42:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-06 22:42:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-06 22:42:03       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-06 22:42:03       20 阅读

热门阅读

  1. 面试:如何故意减慢网站速度?

    2023-12-06 22:42:03       42 阅读
  2. 普中STM32 单片机资料

    2023-12-06 22:42:03       31 阅读
  3. 转载:利用Flask实现深度学习模型部署

    2023-12-06 22:42:03       43 阅读
  4. python中的迭代器、生成器和装饰器(一)

    2023-12-06 22:42:03       33 阅读
  5. 【Q6-30min】

    2023-12-06 22:42:03       34 阅读
  6. lc.105 从前序与中序遍历序列构造二叉树

    2023-12-06 22:42:03       32 阅读
  7. 安卓https抓包(提供软件+视频)

    2023-12-06 22:42:03       40 阅读
  8. GenericServlet 和 HttpServlet

    2023-12-06 22:42:03       28 阅读