[算法导论] 236.二叉树的最近公共祖先

0.题目

1. 递归

1.1 力扣思路

1.2 简单思路 

• 最近公共祖先的情况无外乎三种情况,解答此题最好分别画出三种情况的草图,问题便迎刃而解
	○ 树形一:root为p,q中的一个,这时公共祖先为root
	○ 树形二:p,q分别在root的左右子树上(p在左子树,q在右子树;还是p在右子树,q在左子树的情况都统一放在一起考虑)这时满足p,q的最近公共祖先的结点也只有root本身
	○ 树形三:p和q同时在root的左子树;或者p,q同时在root的右子树,这时确定最近公共祖先需要遍历子树来进行递归求解。
	
• 清楚了这些,开始编写程序,首先要明确递归的方式,需要采用类似后序遍历的方式,先遍历左,右子树得到结果,再根据结果判断出当前树形属于前面三种讨论的哪一种,再返回相应的答案。
• 接下来开始着手实现细节:
	○ 明确递归边界:root为空(此时为空树),则直接返回NULL,不存在公共祖先;root为p或q中的一个,则直接返回root;
	这两种情况都是不需要通过递归直接能得出答案的,故直接终止递归返回即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心心喵

喵喵(*^▽^*)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值