java - 如何找到树中的第二大值

标签 java algorithm data-structures tree

<分区>

我不明白如何找到树中第二大元素的逻辑。

public static int largestR(TreeNode<Integer> root){
    if(root==null){
        return Integer.MIN_VALUE;
    }

    int max=root.data;
    for(int i=0;i<root.children.size();i++){

        int n=largestR(root.children.get(i));
        if(max<n){
            max=n;
        }
    }   
    return max;
}

树不是二叉树,一个节点可以有任意数量的子节点。

如果你能给我解决方案的算法代码就太好了

谢谢。

最佳答案

您需要存储 2 个数字而不是 1 个。

这里是我的实现(不确定语法是否正确):

public static void PushAnswer(int[] m, int value)
{
    if (m[1] >= value) return;
    if (m[0] >= value)
    {
        m[1] = value;
        return;
    }

    m[1] = m[0];
    m[0] = value;
}

public static void largestR(TreeNode<Integer> root, int[] answer)
{
    if (root == null)
    {
        return;
    }

    PushAnswer(answer, root.data);
    for (int i = 0; i < root.children.size(); i++)
    {
        largestR(root.children.get(i));
    }
}

public static int[] getLargestR(TreeNode<Integer> root)
{
    int[] answer = new int[2];
    answer[0] = Integer.MIN_VALUE;
    answer[1] = Integer.MIN_VALUE;
    largestR(root, answer);

    return answer;
}

关于java - 如何找到树中的第二大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41484975/

相关文章:

Java/EJB 3.0 CMT/JTA/MySQL/Hibernate - 事务不回滚

c - 将堆栈解析为二叉树?

data-structures - 优先队列和堆

java - 运行 Java 一段特定的时间

java - Gradle 复合项目 : "Could not resolve" even with correct paths

java - 无需注册即可连接到 RMI 对象

php - 计算人类可读耗时的最佳方法

algorithm - 如果一个节点等于二叉搜索树中的父节点,我们将它放在哪一边

algorithm - 为什么 n log(n) 比 n 具有更高的优势?

c++ - 制表符分隔的文件数据要存储到数据结构中