Loading

二叉树求两个结点的父节点及一个结点的所有祖先结点

求两个结点的父节点

有一个比较简单的方法是遍历二叉树数,判断结点的左右结点是否为给出结点。这里采用另外一种方法:

public static<T> BinaryTreeNode<T> LCA(BinaryTreeNode<T> root, BinaryTreeNode<T> a, BinaryTreeNode<T> b){
        // 查找a,b结点的父结点
        BinaryTreeNode<T> left,right;
        if(root == null)
            return root;
        if(root.data == a.data || root.data == b.data)
            return root;
        left = LCA(root.getLeft(),a,b);
        right = LCA(root.getRight(),a,b);
        if(left != null && right != null)
            return root;
        else
            return left == null ? right : left;
    }

求给出结点的所有祖先结点

给出一个结点,求所有的祖先结点,也可以理解为求根节点到该节点的路径。

public static<T> int printAllAncestors(BinaryTreeNode<T> root, BinaryTreeNode<T> node){
        // 求结点node的所有祖先结点
        if(root == null || root.getLeft() == null || root.getRight() == null)
            return 0;
        if(root.getLeft().data == node.data || root.getRight().data == node.data
                || printAllAncestors(root.getLeft(),node) == 1 || printAllAncestors(root.getRight(), node) == 1){
            System.out.println(root.getData());
            return 1;
        }
        return 0;
    }

完整代码可以访问我的GitHub:https://github.com/StriverLi/Data-Structures-and-Algorithms-in-Java/blob/master/src/tree/BinaryTreeNode.java

posted @ 2017-05-05 16:10  leon_x  阅读(95)  评论(0)    收藏  举报