剑指 Offer 68 - II: 二叉树的最近公共祖先

文章讨论了一种处理非搜索二叉树问题的方法,主要依赖深度优先搜索算法。在遍历过程中,利用树的特点和搜索策略,通过记录父节点来匹配目标节点。强调了递归时避免全局变量的影响,应使用局部变量确保结果正确。在遍历过程中,遇到特定条件(如左右子树的值)即可确定目标节点,无需遍历完整棵树。
摘要由CSDN通过智能技术生成

这道题难度就加大了,因为不是搜索二叉树,这就意味着不能通过左右这种方法来解决问题。可以通过记录父节点的方式来进行匹配?所以通过深度优先搜索算法,首先明白树的特点,其实和前面那题一样,也是如果左边有右边没有就是左边第一个,左边有右边也有就是根节点。然后只要利用深度优先搜索的特点,在第一个匹配的地方即设置返回条件(不遍历完全)。就可以和是不是搜索二叉树没有关系了!(因为即使大小不知道位置总是固定的,可以通过提前终止来判断)。

 千万要记住,递归的方法对于全局变量是很不友好的!!所以在这种情况下需要每次调用的时候声明一次才不会被覆盖,不然假设左边循环用完了到了右边那么那个得到的结果就会被覆盖掉。

2023/8/24

再一次看到这道题还是有点懵逼,但其实也很简单,只需要遍历,然后在开头排除两种终点情况(达到了空,说明到了结尾,要么找到了p或者q,然后就是这个当前节点是第一个遍历到的)。因此到了if判断语句的时候,所有遍历都已经结束了,这时候的left和right代表了左和右遇到的第一个值(如果有),那么很简单,只需要判断是否两边都有值,有的话说明就是root,左边没有就是右边的(另一个值在下面,但不用再往下进行判断了),左边同理,千万记住!

还有注意前面写的全局变量和局部变量的区别。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值