进程是操作系统进行资源分配的基本单位,每个进程都有自己的独立内存空间。
由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。
线程又叫轻量级进程,是进程的一个实体,是处理器任务调度和执行的基本单位。
它是比进程更小的能独立运行的基本单位。
线程自己不拥有资源,但它可与同属一个进程的线程共享进程所拥有的全部资源。
互斥锁是并发程序中对共享资源进行访问控制的主要手段,对此 Go 语言提供了非常简单易用的 Mutex,Mutex 是一个结构体类型,对外暴露 Lock() 和 Unlock() 两个方法分别用于加锁和解锁。
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
难度:🌟🌟
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
难度:🌟🌟🌟🌟🌟
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
难度:🌟🌟🌟
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
难度:🌟🌟