输入: [1,2,3,null,5,null,4]
输出: [1,3,4]
输入: []
输出: []
/**
* @param {TreeNode} root
* @return {number[]}
*/
function exposedElement(root) {
};
---
## 区别
PNG8、PNG16、PNG32 是 PNG 图像格式的不同变种,它们主要区别在于颜色深度和透明度支持的不同。
1. PNG8:
PNG8 是一种 8 位颜色深度的 PNG 图像格式,它最多支持 256 种颜色。对于颜色相对较简单、不需要透明度的图像,使用 PNG8 可以获得较小的文件大小。PNG8 图像使用一种叫做调色板(Palette)的技术来存储颜色信息,它会创建一个包含所有使用的颜色的列表,并在图像中通过索引来引用这些颜色。
2. PNG16:
PNG16 是一种 16 位颜色深度的 PNG 图像格式,它支持更多的颜色,最多可达 65536 种颜色。PNG16 适用于一些颜色较丰富的图像,但同样不支持透明度。
3. PNG32:
PNG32 是一种 32 位颜色深度的 PNG 图像格式,它支持上千万种颜色,并且支持完全透明度(alpha 通道)。PNG32 适用于需要精确透明度控制的图像,例如图标、Logo 等。
## PNG 的压缩原理
PNG 图像使用无损压缩技术来减小文件大小。它主要通过以下两种压缩方式来实现:
1. 使用 DEFLATE 算法:PNG 使用 DEFLATE 算法来对图像数据进行压缩,这是一种无损的压缩算法,可以将相邻的相似数据块识别并用更短的编码进行替代,从而减小文件大小。
2. 使用索引颜色和调色板:对于 PNG8 图像,它使用调色板技术来存储颜色信息。调色板是一个包含所有使用的颜色的列表,然后图像中使用颜色的索引来引用调色板中的颜色。这样可以大大减小文件大小,特别适用于颜色较简单的图像。
由于 PNG 使用无损压缩,所以图像的质量不会因为压缩而损失,但这也导致 PNG 文件相对于其他有损压缩格式(如 JPEG)通常会更大。因此,在选择使用 PNG 还是其他格式时,需要根据图像类型、透明度需求和文件大小要求进行权衡。