二叉树最近公共祖先

简介: 二叉树最近公共祖先
import java.util.*;
class Solution {
   public boolean getPath(TreeNode root, TreeNode node,
        Deque<TreeNode> stack) {
        if(root == null || node == null)return false;
        stack.push(root);
        //放完之后 要检查
        if(root == node) return true;
        boolean ret1 = getPath(root.left,node,stack);
        if(ret1) return true;
        boolean ret2 = getPath(root.right,node,stack);
        if(ret2) return true;
        stack.pop();
        return false;
    }
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    //1、两个栈当中 存储好数据
    Deque<TreeNode> stack1 = new LinkedList<>();
    getPath(root,p,stack1);
    Deque<TreeNode> stack2 = new LinkedList<>();
    getPath(root,q,stack2);
    //2、判断栈的大小
    int size1 = stack1.size();
    int size2 = stack2.size();
    int len = size1 - size2;
    if(size1 > size2){
        while(len > 0){
            stack1.pop();
            len--;
        }
    } else {
        len = size2 -size1;
        while(len > 0){
            stack2.pop();
            len--;
        }
    }
    while(stack1.peek() != stack2.peek()){
        stack1.pop();
        stack2.pop();
    }
    return stack1.peek();
    }
}
相关文章
|
6月前
|
算法 前端开发
2583. 二叉树中的第 K 大层和
2583. 二叉树中的第 K 大层和
52 0
28_二叉树的最近公共祖先
28_二叉树的最近公共祖先
|
26天前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
12 0
|
6月前
|
算法 Java 程序员
【算法训练-二叉树 五】【最近公共祖先】二叉树的最近公共祖先、二叉搜索树的最近公共祖先
【算法训练-二叉树 五】【最近公共祖先】二叉树的最近公共祖先、二叉搜索树的最近公共祖先
60 0
|
6月前
|
算法 网络协议 NoSQL
认识二叉树(详细介绍)
认识二叉树(详细介绍)
|
11月前
|
C++
二叉树的最近公共祖先(C++实现)
二叉树的最近公共祖先(C++实现)
59 1
|
6月前
|
Java C++ Python
leetcode-236:二叉树的最近公共祖先
leetcode-236:二叉树的最近公共祖先
29 0
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(上)
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(上)
|
存储 搜索推荐
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(下)
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(下)
leetcode235二叉树搜索树的最近公共祖先
leetcode235二叉树搜索树的最近公共祖先
61 0
leetcode235二叉树搜索树的最近公共祖先