本次为大家带来的题目是leetcode236二叉树的最近公共祖先
本道题的直观思路是自底向上进行寻找,如果存在的话那么向上返回,如何能够自底向上遍历呢?我们可以利用回溯进行处理,那么需要注意的是进行回溯的时候一定要使用后序遍历来操作,因为后序遍历的顺序是左、右、根,那么在根节点也就是我们进行判断的操作了。
下面说下可能存在的情况
1.如果当前节点的左和右子树都不为空,那么说明找到了公共祖先,直接返回。
2.假如节点左子树为空,右子树不为空,说明我们要继续向上返回。同理右子树为空左子树不为空也要返回。
具体的代码实现如下:
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {//终止条件if(root==null) return null;//如果当前节点为q或p直接返回if(root==p||root==q) return root;//后序遍历//左TreeNode left = lowestCommonAncestor(root.left,p,q);//右TreeNode right = lowestCommonAncestor(root.right,p,q);//根//左右都不为空,说明存在q,pif(left!=null&&right!=null){return root;}else if(left!=null &&right==null){return left;}else if(right!=null&&left==null){return right;}else{return null;}}
}