zoukankan      html  css  js  c++  java
  • 236.Lowest Common Ancestor of a Binary Tree

    题目描述

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.

    According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”

    Given the following binary tree: root = [3,5,1,6,2,0,8,null,null,7,4]

    img

    Example 1:

    Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
    Output: 3
    Explanation: The LCA of nodes 5 and 1 is 3.

    Example 2:

    Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
    Output: 5
    Explanation: The LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.

     

    Note:

    • All of the nodes' values will be unique.

    • p and q are different and both values will exist in the binary tree.

    难度系数 Medium

    解法一:简单的dfs

    class Solution {
    public:
        TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
            if (!root || root==p || root==q) return root;
            //得到的是子节点
            TreeNode* left = lowestCommonAncestor(root->left, p, q);
            TreeNode* right = lowestCommonAncestor(root->right, p, q);
            //返回父节点
            if (left && right) return root;
            
            return left ? left : right;       
        }
    };

    解法二:对上个算法的优化

    class Solution {
    public:
        TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
           if (!root || p == root || q == root) return root;
           TreeNode *left = lowestCommonAncestor(root->left, p, q);
           //表示已找到节点,不需要再找
           if (left && left != p && left != q) return left;
           TreeNode *right = lowestCommonAncestor(root->right, p , q);
        if (left && right) return root;
           return left ? left : right;
        }
    };

    github地址:https://github.com/AntonioSu/leetcode/blob/master/problems/236.LowestCommonAncestorofaBinaryTree.md

  • 相关阅读:
    java动态注册Filter,Servlet,Listener
    java防止html脚本注入
    java中常用的几种跨域方式
    backbone 要点知识整理
    创建对象-constructor丢失的问题
    css3 动画(animation)-简单入门
    sass安装
    sass安装步骤
    javascript how sort() work
    javascript 获取调用属性的对象
  • 原文地址:https://www.cnblogs.com/AntonioSu/p/12757807.html
Copyright © 2011-2022 走看看