我使用了不同的方法。但是只有2个测试用例成功运行。这是我的代码:
public static TreeNode<Integer> findNextLargerNode(TreeNode<Integer> root, int n){
Queue<TreeNode<Integer>>pendingNodes = new LinkedList<>();
pendingNodes.add(root);
if(root == null)
{
return null;
}
if(root.data > n)
{
return root;
}
while(pendingNodes.size()!=0)
{
TreeNode<Integer> front = pendingNodes.remove();
for(int i =0; i<front.children.size(); i++)
{
pendingNodes.add(front.children.get(i));
if(front.children.get(i).data > n)
{
return front.children.get(i);
}
}
}
return null;
}
请让我知道我在哪里出错。
答案 0 :(得分:0)
您的代码中有2个主要错误:
if(root.data > n) return root;
考虑以下树:
40
/ \
10 30
现在如果以n = 15运行函数会发生什么?根较大,则n返回40,而不是30作为必需输出
if(front.children.get(i).data > n) return front.children.get(i);
考虑以下示例:
40
/ \
20 18
同样,以n = 15运行,您将得到20作为在根上检查的第一个孩子。该函数将返回并且不会继续检查其他更合适的节点。
您的最简单方式(可能不是最短)可以使用以下算法来实现:
答案 1 :(得分:0)
考虑:
if(front.children.get(i).data > n)
通过此if
语句,将返回下一个更大的元素。
它适用于以下情况:
21
10 3 20 30 40 2 40 50 0 0 0 0
但情况如下:
21
10 3 20 20 40 2 40 30 0 0 0 0
它将返回40,而我们需要30作为答案。