代码随想录

本文介绍了如何通过中序遍历找到二叉搜索树的最小绝对差,利用双指针法计算众数,以及后序遍历寻找最近公共祖先的算法。详细展示了代码实现和逻辑过程。
摘要由CSDN通过智能技术生成

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

思路:代码随想录

思路:中序遍历树,放入数组。再循环遍历数组 找到最小值。

501 二叉搜索树的众数

思路:代码随想录

思路:使用双指针思想。

弄一个指针指向前一个节点,这样每次cur(当前节点)才能和pre(前一个节点)作比较。

而且初始化的时候pre = NULL,这样当pre为NULL时候,我们就知道这是比较的第一个元素。

代码如下:

if (pre == NULL) { // 第一个节点
    count = 1; // 频率为1
} else if (pre->val == cur->val) { // 与前一个节点数值相同
    count++;
} else { // 与前一个节点数值不同
    count = 1;
}
pre = cur; // 更新上一个节点

我们只需要遍历一遍就可以找到最大频率:

如果频率等于最大频率 就把元素的值放进数组。如果当前元素出现的频率大于最大频率:更新最大频率,再清空数组,再把当前元素的值放入数组 。

235.二叉树最近公共祖先

思路:代码随想录

思路:后序遍历 自底向上返回。首先最容易想到的一个情况:如果找到一个节点,发现左子树出现结点p,右子树出现节点q,或者 左子树出现结点q,右子树出现节点p,那么该节点就是节点p和q的最近公共祖先。情况二:节点本身就可以成为祖先。

那么我们来说一说,如果 root == q,或者 root == p,说明找到 q p ,则将其返回,这个返回值,后面在中节点的处理过程中会用到,那么中节点的处理逻辑,下面讲解。

代码如下:

if (root == q || root == p || root == NULL) return root;

此题需要遍历整棵树,因为我们需要left 和 right 来处理 中的逻辑:

left = 递归函数(root->left);  // 左
right = 递归函数(root->right); // 右
left与right的逻辑处理;

最后:

如果left 和 right都不为空,说明此时root就是最近公共节点。这个比较好理解

如果left为空,right不为空,就返回right,说明目标节点是通过right返回的,反之依然

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值