zoukankan      html  css  js  c++  java
  • 236. 二叉树的最近公共祖先

    题目链接:

    https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/

    解题思路:

    递归看起来是从上往下,实际上从下往上的。如果发现在左右子树一个为空,一个不为空,就证明在那个不为空的子树。我们不需要关心p和q到底返回的是具体哪个,只需要知道左右不为空就行

    有三种情况,p q 都在左子树或右子树,p q分别在左子树和右子树,

    判断当前遍历的节点是否为空,为空返回null,节点是否等于p,是否等于q,是的话返回null。

    之后判断left 和right是否为空, 若都不为空 ,则当前root为答案,若其中一个为空,则返回另一边,为答案。

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 class Solution {
    11     public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    12         if(root==null || root==p||root==q)
    13             return root;
    14         TreeNode left = lowestCommonAncestor(root.left,p,q);
    15         TreeNode right = lowestCommonAncestor(root.right,p,q);
    16         if(left!=null && right!=null)
    17             return root;
    18         if(left==null)
    19             return right;
    20         return left;
    21     }
    22 }
  • 相关阅读:
    2020/3/21 简单的学习
    2020/3/7 A-B
    2020/3/6 旋转骰子
    2020/3/6 美丽数组
    面向对象程序设计寒假作业2
    自我介绍
    深度优先搜索-迷宫问题(走迷宫题解)
    开机方案题解
    好吃的巧克力题解
    数楼梯题解
  • 原文地址:https://www.cnblogs.com/wangyufeiaichiyu/p/11240775.html
Copyright © 2011-2022 走看看