www

导航

回溯-最近公共祖先

package tree;


public class CommonAncestor {

    /**
     * 定义TreeNode
     */
    private static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x) {
            val = x;
        }
    }

    private TreeNode lca = null;

    // 最近公共祖先
    TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        containNode(root, p, q);
        return lca;
    }

    private boolean containNode(TreeNode root, TreeNode p, TreeNode q) {
        // 终止条件
        if (root == null) {
            return false;
        }
        if (root == p || root == q) {
            return true;
        }
        boolean left = containNode(root.left, p, q);
        boolean right = containNode(root.right, p, q);
        if (left && right) {
            lca = root;
        }
        return left || right;
    }
    
}

 

posted on 2020-09-27 18:01  www_practice  阅读(113)  评论(0编辑  收藏  举报