代码随想录算法训练营第二十一天| 530、501、236

530.二叉搜索树的最小绝对差 

文档和视频讲解:代码随想录(programmercarl.com)

状态:ac

用时:1h

思路:由于是二叉搜索树,所以中序遍历是递增的序列,只需要相邻的两个元素相减即可。用一个pre指针存放之前处理的节点,一个变量存放最小绝对值。

代码:

图1



501.二叉搜索树中的众数 

文档和视频讲解:代码随想录(programmercarl.com)

状态:ac

用时:1h

思路:由于是二叉搜索树,所以中序遍历是递增的序列,只需要比较相邻的两个元素即可,用一个容器存放结果(因为可能有相同次数的元素),相等则次数加一,大于当前最大次数,则清空容器中所有元素,然后将当前众数存入容器。

代码:

图2



 236. 二叉树的最近公共祖先 

文档和视频讲解:代码随想录(programmercarl.com)

状态:未ac

用时:1.5h

思路:采用后序遍历,方便自底向上查找公共祖先。最近公共祖先两种情况:一,p和q分别在不同的子树,当一个节点发现左右子树分别包含其中一个时,就是最近公共祖先;二,p和q在同一子树,此时p或q自身就是公共祖先。两个情况处理是一样的,都是遇到p或q就直接返回。递归的返回值是树节点类型,中止条件是遇到p或者q或者为空时,返回p或q或空指针。逻辑处理是获取左右子树返回的指针,两个指针存在则当前节点就是最近公共祖先;两个指针都为空,表示当前节点为根的子树没有p和q的公共祖先;两个指针只有一个存在的话,该节点是最近公共祖先的祖先或父母,返回不为空的指针即可。

图3 整个流程

代码:

图4
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。