题解 | #在二叉树中找到两个节点的最近公共祖先#
在二叉树中找到两个节点的最近公共祖先
https://www.nowcoder.com/practice/e0cc33a83afe4530bcec46eba3325116
方法:
先求路径,再找公共节点
public class Solution {
/**
*
* @param root TreeNode类
* @param o1 int整型
* @param o2 int整型
* @return int整型
*/
//是否找到的标志
public boolean flag=false;
//求路径
public void path(TreeNode root,Stack<TreeNode>stack,int obj){
if(root==null||flag)
return;
stack.push(root);
if(root.val==obj){
flag=true;
return;
}
//左右子树找路径
path(root.left,stack,obj);
path(root.right,stack,obj);
if(flag)
return;
//该节点上没路径,出栈
stack.pop();
}
public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
// write code here
//深度优先遍历
Stack<TreeNode>stack1=new Stack<>();
Stack<TreeNode>stack2=new Stack<>();
path(root,stack1,o1);
//重置标识
flag=false;
path(root,stack2,o2);
while(stack1.size()>stack2.size())
stack1.pop();
while(stack2.size()>stack1.size())
stack2.pop();
while(stack1.peek()!=stack2.peek()){
stack1.pop();
stack2.pop();
}
return stack1.pop().val;
}
}



查看5道真题和解析