/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
TreeNode cur = root;
List<TreeNode> pList = new ArrayList<TreeNode>();
List<TreeNode> qList = new ArrayList<TreeNode>();
while (cur != p) {
pList.add(cur);
if (cur.val > p.val) {
cur = cur.left;
} else {
cur = cur.right;
}
}
pList.add(cur);
cur = root;
while (cur != q) {
qList.add(cur);
if (cur.val > q.val) {
cur = cur.left;
} else {
cur = cur.right;
}
}
qList.add(cur);
TreeNode ancestor = null;
for (int i = 0; i < pList.size() && i < qList.size(); i++) {
if (pList.get(i) == qList.get(i)) {
ancestor = pList.get(i);
} else {
break;
}
}
return ancestor;
}
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
TreeNode ancestor = root;
while (true) {
if (ancestor.val < p.val && ancestor.val < q.val) {
ancestor = ancestor.right;
} else if (ancestor.val > p.val && ancestor.val > q.val) {
ancestor = ancestor.left;
} else {
break;
}
}
return ancestor;
}
}