在二叉树中有两个结点m和n,若m是n的祖先,则使用后序遍历可以找到从m到n的路径

首先需要理解的是,前中后序遍历都是通过递归的方式,将后来需要用到的结点保存在栈中,比如下面这颗树:

如果是前序遍历,根左右,过程是:根节点m入栈并输出,访问m的左孩子a,a入栈并输出,访问a的左孩子c,c入栈并输出,c没有左孩子,无元素入栈,c没有右孩子,无元素入栈,c出栈,此时栈顶元素为a,访问a元素的右孩子d,d入栈并输出,d没有左孩子,无元素入栈,d没有右孩子,无元素入栈,d出栈,a左右子树都访问完了所以出栈,现在栈顶元素是m,m已经没有作用了所以出栈,访问m的右孩子b,m的右孩子b入栈并输出,接着访问b的左孩子e,e入栈并输出……

如果中序遍历,左根右,过程是:根节点m入栈,访问m的左孩子,所以m的左孩子a入栈,访问a的左孩子,所以a的左孩子c入栈,c没有左孩子,c现在输出并出栈,c没有右孩子所以没有元素入栈,现在栈顶元素是a,a输出并出栈,a的右孩子d入栈,此时d没有左孩子所以没有元素入栈,d输出并出栈,d没有右孩子所以没有元素入栈,现在栈顶元素是m,m输出,此时m已经没有作用了所以出栈,m的右孩子b入栈,访问b的左孩子,所以b的左孩子e入栈……

所以在前序和中序的过程中,如果n在m的右子树部分,遍历过程中找到了n,但是m已经不在栈中,因为栈中只会保留等会需要用到的e和b结点,而m已经完成了访问根结点和m的左子树的任务,已经被出栈,所以无法追溯n如何走到m

但是后序遍历就不一样啦,后序的顺序是左右根,所以只要m的左右子树还没遍历完成,m就不能出栈,在遍历m的左右子树过程中,无论在m的左边还是右边找到了n,都可以直接返回然后根据栈中的路径让n找到回到m的路,这样就能找到m到n的路径~

所以一旦n在m的右子树,且离的较远,m就会在前序和中序的过程中因为已经完成了访问左、访问根的任务,而被栈遗忘,让找到了n的时候也不知怎么回到m……而只有后序会让作为祖先(子树的根)的m永远被铭记直到n找到m为止…

【iOS】Tab Bar 的 Item 按钮的像素大小要求

根据苹果官方人机界面指南(Human Interface Guidelines)可以得知:

iOS系统会根据设备和方向显示两种标签栏:常规(Regular)紧凑(Compact),所以在设置自定义Tab Bar Item的时候也应该包含常规和紧凑两种不同的尺寸

根据图形是圆形、方形、宽形、高形,像素也有不同的要求:

如果图标是圆形的,应该提供:25pt@2x、25pt@3x、18pt@2x、18pt@3x

如果图标是方形的,应该提供:23pt@2x、23pt@3x、17pt@2x、17pt@3x

如果图标是宽形的,应该提供:31pt@2x、31pt@3x、23pt@2x、23pt@3x

如果图标是高形的,应该提供:28pt@2x、28pt@3x、20pt@2x、20pt@3x

以下是完整表格~

【iOS】Image图片属性之Render As Template Image

把图片设置成Render as Template Image,系统会忽略图像的颜色信息,并根据图像中的alpha值创建图像模板,图像中alpha值 < 1.0的部分被视为完全透明,alpha值 = 1.0的部分为Image Tint的颜色,默认Default为蓝色

假设原图为:

将其设置为Render as Template Image,并且将Tab Bar Item设置为该图片,则Tab Bar的Item会变为这样:

如果将Tab BarImage Tint设置为红色,则Tab Bar的Item会变为这样:

【iOS】Scale Fill、Aspect Fit 和 Aspect Fill 的区别(Content Mode)

ImageView –  Content Mode中Scale FillAspect Fit Aspect Fill 的区别

Scale Fill:缩放(改变图片比例)以填满整个Image View

Aspect Fit:保持图片原比例,尽可能让图片全部显示出来,Image View 剩下空出来的部分是透明的

Aspect Fill:保持图片原比例,填满整个Image View(图片可能会被裁剪掉)

图片示例(只好牺牲这只可爱的小喵咪啦~):

Scale Fill

 Aspect Fit

Aspect Fill


UIViewContentModeScaleToFillScales the content to fit the size of itself by changing the aspect ratio of the content if necessary.

UIViewContentModeScaleAspectFitScales the content to fit the size of the view by maintaining the aspect ratio. Any remaining area of the view’s bounds is transparent.

UIViewContentModeScaleAspectFillScales the content to fill the size of the view. Some portion of the content may be clipped to fill the view’s bounds.