1. public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    2. List<TreeNode> path_p = getPath(root, p);
    3. List<TreeNode> path_q = getPath(root, q);
    4. TreeNode ancestor = null;
    5. for (int i = 0; i < path_p.size() && i < path_q.size(); i++) {
    6. if (path_p.get(i) == path_q.get(i)) {
    7. ancestor = path_p.get(i);
    8. } else {
    9. break;
    10. }
    11. }
    12. return ancestor;
    13. }
    14. public List<TreeNode> getPath(TreeNode root, TreeNode target) {
    15. List<TreeNode> path = new ArrayList<TreeNode>();
    16. TreeNode node = root;
    17. while (node != target) {
    18. path.add(node);
    19. if (target.val < node.val) {
    20. node = node.left;
    21. } else {
    22. node = node.right;
    23. }
    24. }
    25. path.add(node);
    26. return path;
    27. }