我不明白如何找到树中第二大元素的逻辑。
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;
}