【问题标题】:Find a node at the same level in a tree for a given node?在给定节点的树中找到同一级别的节点?
【发布时间】:2018-06-22 12:15:11
【问题描述】:

当一个级别成员作为输入时,我必须找到同一级别的节点。但我无法获得估计的输出。我没有找到我的代码错误的地方。我给出了我无法识别错误的代码。谁能解释我在代码中犯的错误?

我的示例输入和输出是,

       10

     /   \

   17     12

 /  \    /  \

10  8     1 3

例如:-

输入:17

输出:12

输入:1

输出:8 或 3 或 10

这是我的示例代码,

public void printNode(Node node)
{
    Queue<Node> que = new LinkedList<Node>();
    Queue<Node> aux = new LinkedList<Node>();
    que.add(root);
    while(!que.isEmpty())
    {
        Node temp = que.poll();
        System.out.println(temp+" ");
        if(temp.left != null)
        {
            que.add(temp.left);
            aux.add(temp.left);
        }
        if(temp.right != null)
        {
            que.add(temp.right);
            aux.add(temp.right);
        }
        if(aux.contains(node))
        {
            while(!aux.isEmpty())
            {
                if(aux.poll() != node)
                System.out.print(aux.poll()+" ");               
            }
        }
        else
        {
            aux.clear();
        }
    }
}

【问题讨论】:

标签: java binary-tree


【解决方案1】:

当您检查aux.contains(node)时,目标节点之后具有相同级别的节点不入队aux

【讨论】:

  • 为什么它们没有排入队列?我应该怎么做才能将这些节点排入队列?
  • 我的想法,您最好维护aux队列,其中项目为节点,级别可以是 parentNode.level + 1,在找到目标节点之前不要轮询/取消队列项目,轮询所有之前级别较低的节点并继续。当找到一个更高级别的节点时,aux 的所有项目都是你的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多