LeetCode236 二叉树的最近公共祖先
解法1,递归函数不带返回值
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
boolean pFlag = false;
boolean qFlag = false;
TreeNode result = null;
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root == p || root == q){
return root;
}
dfs(root.left,p,q);
if(pFlag && qFlag){
return result;
}
if(pFlag || qFlag){
return root;
}
dfs(root.right,p,q);
return result;
}
public void dfs(TreeNode treenode, TreeNode p, TreeNode q){
boolean temppflag = false;
boolean tempqflag = false;
if(treenode == null ){
return;
}
dfs(treenode.left, p, q);
if(pFlag){
temppflag = true;
pFlag = false;
}
if(qFlag){
tempqflag = true;
qFlag = false;
}
dfs(treenode.right, p, q);
if(treenode == p){
pFlag = true;
}
if(treenode == q){
qFlag = true;
}
if(temppflag){
pFlag = true;
}
if (tempqflag){
qFlag = true;
}
if(pFlag && qFlag && null == result){
result = treenode;
}
}
}
结果
解法2,递归函数带返回值
class Solution {
TreeNode result = null;
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
dfs(root, p, q);
return result;
}
public boolean dfs(TreeNode treenode, TreeNode p, TreeNode q){
if(null == treenode){
return false;
}
boolean left = dfs(treenode.left, p, q);
boolean right = dfs(treenode.right, p, q);
if((left && right) || treenode.val == p.val || treenode.val == q.val){
result = treenode;
}
return left || right || treenode.val == p.val || treenode.val == q.val;
}
}
结果