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

    1. 问题描写叙述

      给定一棵二叉树和两个节点p、q。查找这两个节点近期的公共父节点。
      que


    2. 方法与思路

      因为给定的是一颗普通的二叉树。与之前的二叉搜索树不一样,子树之间没有大小关系。

    可是能够用还有一种思路,当前节点假设是p。q的公共最先节点,则p,q一定在当前节点的左右子树中。能够用递归解决。
      

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
            if(root == NULL || root == p || root == q) return root;
    
            TreeNode *ltree = lowestCommonAncestor(root->left,p,q);
            TreeNode *rtree = lowestCommonAncestor(root->right,p,q);
    
            if(ltree && rtree) return root;
    
            return ltree?

    ltree:rtree; } };

      事实上这是一个经典的LCA问题。网上有好多资料可供參考。分为离线算法(Tarjan)和在线算法(RMQ)。

  • 相关阅读:
    [CF1469D] Ceil Divisions
    [CF632D] Longest Subsequence
    [CF1215E] Marbles
    [CF689D] Friends and Subsequences
    [CF707D] Persistent Bookcase
    [CF10D] LCIS
    [CF713C] Sonya and Problem Wihtout a Legend
    [CF1114E] Arithmetic Progression
    [CF1404B] Tree Tag
    [CF710E] Generate a String
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7048298.html
Copyright © 2011-2022 走看看