[编程题] lc[236. 二叉树的最近公共祖先]
Posted jiyongjia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[编程题] lc[236. 二叉树的最近公共祖先]相关的知识,希望对你有一定的参考价值。
[编程题] lc:236. 二叉树的最近公共祖先
题目描述
输入输出例子
思路
使用后续遍历的思想,根据找到了左和右的情况,进行相应的返回结果。
Java代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
//如果我们碰到了是
if(root==null || root==p || root==q){return root;}
//这里就使用到了后续遍历的思想了
TreeNode left = lowestCommonAncestor(root.left,p,q);
TreeNode right = lowestCommonAncestor(root.right,p,q);
//上边得到了当前root的左右子树,判断情况,我们就知道我们返回什么。
//如果左边没有任何p,q,那直接返回right节点是一定能找到的
if(left==null){
return right;
}
if(right==null){
return left;//类似原理
}
//如果左右都不为空,那么root节点就是公共祖先
if(left!=null && right!=null){
return root;
}else{
return null;
}
}
}
以上是关于[编程题] lc[236. 二叉树的最近公共祖先]的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Java刷题笔记—236. 二叉树的最近公共祖先