二叉树最近公共祖先

简介: 二叉树最近公共祖先
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();
    }
}
相关文章
28_二叉树的最近公共祖先
28_二叉树的最近公共祖先
|
2月前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
21 0
|
7月前
|
算法 Java 程序员
【算法训练-二叉树 五】【最近公共祖先】二叉树的最近公共祖先、二叉搜索树的最近公共祖先
【算法训练-二叉树 五】【最近公共祖先】二叉树的最近公共祖先、二叉搜索树的最近公共祖先
64 0
|
C++
二叉树的最近公共祖先(C++实现)
二叉树的最近公共祖先(C++实现)
69 1
|
7月前
|
Java C++ Python
leetcode-236:二叉树的最近公共祖先
leetcode-236:二叉树的最近公共祖先
33 0
|
存储
【二叉树】(一)
【二叉树】(一)
48 0
二叉树详解:带你掌握二叉树
二叉树详解:带你掌握二叉树
237 0
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(上)
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(上)
|
存储 搜索推荐
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(下)
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(下)
leetcode 236 二叉树的最近公共祖先
leetcode 236 二叉树的最近公共祖先
79 0
leetcode 236 二叉树的最近公共祖先