algorithm - 最大平衡二叉树的大小

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

<分区>

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

最佳答案

一些代码可能会有所帮助。这是 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

关于algorithm - 最大平衡二叉树的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45285567/

相关文章:

c++ - c/c++ 中的 url 缩短算法 - 面试

python - 同构python算法

c++ - 无法让我的压缩算法正常运行

jquery - .jstree() 或 .tree(),以及如何让它工作

c++ - C++遍历一般树

java - 如何在二叉搜索树中找到最小值?

c++ - 链表数据访问

c - 合并给定空间中的元素数组

c - 如何使用递归函数只打印树的 5 个节点

c - 为什么这个搜索函数返回一个指向指针的指针呢?