题目分析:
通过审题,我们不难发现可以有三种情况
1.结点q p 分别在左子树上和右子树上,这时候其最近的公共结点无疑是根节点root
2.结点q p都在左子树上,这时候我们只要找到谁先早出现,谁便是公共祖先
3.结点q p都在右子树上,与第二种情况一样,谁先出现谁便是公共祖先
//求两结点的公共祖先 public TreeNode lowestpublicanestor(TreeNode root,TreeNode p,TreeNode q){ if(root == null){ return null; } //看根节点是否是这两个结点中的其中一个 if(p == root || q == root){ return root; } TreeNode left = lowestpublicanestor(root.left,p,q); TreeNode right = lowestpublicanestor(root.right,p,q); //第一种情况 结点分别在左右子树上 if(left != null && right != null){ return root; }else if(left != null){ //两个结点都在左子树上 return left; }else{ //两个结点都在右子树上 return right; } }
二叉树刷题------最近公共祖先
最新推荐文章于 2024-09-01 15:30:33 发布