二叉树最近公共祖先

简介: 二叉树最近公共祖先
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_二叉树的最近公共祖先
|
4月前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
33 0
|
9月前
|
算法 Java 程序员
【算法训练-二叉树 五】【最近公共祖先】二叉树的最近公共祖先、二叉搜索树的最近公共祖先
【算法训练-二叉树 五】【最近公共祖先】二叉树的最近公共祖先、二叉搜索树的最近公共祖先
77 0
|
9月前
|
算法
【力扣】94. 二叉树的中序遍历、144. 二叉树的前序遍历、145. 二叉树的后序遍历
【力扣】94. 二叉树的中序遍历、144. 二叉树的前序遍历、145. 二叉树的后序遍历
|
C++
二叉树的最近公共祖先(C++实现)
二叉树的最近公共祖先(C++实现)
77 1
|
9月前
|
Java C++ Python
leetcode-236:二叉树的最近公共祖先
leetcode-236:二叉树的最近公共祖先
36 0
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(上)
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(上)
leetcode 236 二叉树的最近公共祖先
leetcode 236 二叉树的最近公共祖先
85 0
leetcode 236 二叉树的最近公共祖先