该题也是利用了后续遍历的思想,遍历顺序为左子树,右子树,根节点。假如该节点为公共祖先节点,那么p,q一定都是该节点的子节点。不过因为这里是最近公共祖先,有个最近,则不能是两个子节点的祖先的祖先,所以就用到了后序遍历,只有有左节点,则一直找下去,找不到再回溯到上一节点。如果满足条件了,则直接更新结果为这个节点,这样就能保证找到的都是最近公共祖先节点了。只需要判断当前节点,左节点,右节点中是否满足条件的有两个就行了,满足的话当前节点就是目标节点了。当然要保证每次的l+r+mid >0,这样才能更新值

主要是不好想到这样做,想到了还是不是很复杂的,代码如下:

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

 

相关文章: