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)。

  • 相关阅读:
    Pandas对于CSV的简单操作
    前端之BOM和DOM
    前端之JavaScript
    前端之CSS初识
    定时ping取返回值并绘图
    etree不存在解决方法
    内置方法练习(一)
    pip使用
    python变量、变量属性
    python 爬取段子网段子写入文件
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7048298.html
Copyright © 2011-2022 走看看