最大平衡二元子树的大小

时间:2017-07-24 16:23:14

标签: algorithm tree binary-search-tree graph-algorithm divide-and-conquer

我正在尝试创建一种分而治之的算法,当在二叉树的根上运行时,返回树中包含的最大平衡二进制子树的大小,换句话说,最大的大小叶子全部在相同深度的可能子树。

1 个答案:

答案 0 :(得分:1)

某些代码可能有所帮助。这是Java,但它非常通用。

static class Node
{
    String val;
    Node left, right;
}

static class MaxNode
{
    Node node;
    int depth;
}

static int depth(Node node)
{
    if(node.left == null && node.right == null)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}

static int deepestSubtree(Node root, MaxNode maxNode)
{
    if(root == null) return 0;

    int depth = depth(root);

    int leftDepth = deepestSubtree(root.left, maxNode); 
    int rightDepth = deepestSubtree(root.right, maxNode);

    if(leftDepth == rightDepth) 
    {
        depth += leftDepth;
    }

    if(depth > maxNode.depth) 
    {
        maxNode.node = root;
        maxNode.depth = depth;
    }

    return depth;
}

public static void main(String[] args)
{
    Node root = buildTree();

    MaxNode maxNode = new MaxNode();
    deepestSubtree(root, maxNode);
    if(maxNode.node == null)
    {
        System.out.println("No Balanced Tree");
    }
    else
    {
        int size = (int)Math.pow(2, maxNode.depth+1)-1;
        System.out.format("Node: %s, Depth: %d, Size: %d\n", maxNode.node.val, maxNode.depth, size);
    }
}

对于您的示例树,输出为:

Node: D, Depth: 2, Size: 7