二叉树最近公共祖先

简介: 二叉树最近公共祖先
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();
    }
}
相关文章
|
2月前
【LeetCode 44】235.二叉搜索树的最近公共祖先
【LeetCode 44】235.二叉搜索树的最近公共祖先
19 1
28_二叉树的最近公共祖先
28_二叉树的最近公共祖先
|
2月前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
21 0
|
7月前
|
C++ Python
leetcode-235:二叉搜索树的最近公共祖先
leetcode-235:二叉搜索树的最近公共祖先
35 1
|
7月前
|
算法 Java 程序员
【算法训练-二叉树 五】【最近公共祖先】二叉树的最近公共祖先、二叉搜索树的最近公共祖先
【算法训练-二叉树 五】【最近公共祖先】二叉树的最近公共祖先、二叉搜索树的最近公共祖先
64 0
|
C++
二叉树的最近公共祖先(C++实现)
二叉树的最近公共祖先(C++实现)
70 1
|
7月前
|
Java C++ Python
leetcode-236:二叉树的最近公共祖先
leetcode-236:二叉树的最近公共祖先
34 0
|
7月前
|
Linux
求二叉树的先序遍历
求二叉树的先序遍历
leetcode 236 二叉树的最近公共祖先
leetcode 236 二叉树的最近公共祖先
83 0
leetcode 236 二叉树的最近公共祖先
leetcode235二叉树搜索树的最近公共祖先
leetcode235二叉树搜索树的最近公共祖先
63 0
leetcode235二叉树搜索树的最近公共祖先