zoukankan      html  css  js  c++  java
  • 算法题---求二叉树的最近公共祖先

     

    思路一:非递归方法

    1. 找到两个节点的路径的逆序链表,将题转换成两个链表第一个公共节点的问题。

    1.2 两个链表求第一个公共节点

    class Solution {
    public:
        ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
            ListNode *node1 = headA;
            ListNode *node2 = headB;
            
            while (node1 != node2) {
                node1 = node1 != NULL ? node1->next : headB;
                node2 = node2 != NULL ? node2->next : headA;
            }
            return node1;
        }
    };

    2. 找到两个节点的路径,将其存储到两个数组中,遍历两个数组,返回两个数组第一次不相等的上一个节点。

    思路二:递归方法

    def solution(root, p, q):
        if root == None or p == root or q == root:
            return root
        left = solution(root.left, p, q)
        right = solution(root.right, p, q)
        if left and right:
            return root
        if not left and not right:
            return None
        if not left and right:
            return right
        if not right and left:
            return left

    参考

    https://leetcode-cn.com/problems/er-cha-shu-de-zui-jin-gong-gong-zu-xian-lcof/solution/pythonti-jie-bu-tong-si-kao-fang-shi-ying-he-mian-/

  • 相关阅读:
    net core 3.1 发布问题
    KCF追踪方法流程原理
    2
    1
    0
    LK光流算法公式详解
    MySql单表最大8000W+ 之数据库遇瓶颈记
    Quartz.net基于数据库的任务调度管理(Only.Jobs)
    轻量级代码生成器-OnlyCoder 第二篇
    轻量级代码生成器-OnlyCoder 第一篇
  • 原文地址:https://www.cnblogs.com/syw-home/p/13855362.html
Copyright © 2011-2022 走看看