1

我正在执行一项任务,我必须实现这两种方法( add() 和 inOrder() )。

下面的代码是我到目前为止所拥有的。我需要帮助的是调整代码以使其正常工作。目前,它没有做我想做的事。

add() 只会在树上添加最多 3 个级别,之后它只会更改第 3 级的节点。我不确定如何编写代码以使其超过 3 个级别。

inOrder() 不起作用。当我跑步时,它只是停下来,什么也不打印,迫使我停止跑步。

如果您需要更多信息,请与我们联系。

添加():

public void add(int v)
{
    // TODO: implement this method using a non-recursive solution
    BSTNode newNode = new BSTNode(v);
    BSTNode current = m_root;
    if(m_root == null)
    {
        m_root = newNode;
        m_size++;
    }
    else if(v < m_root.getInfo())
    {
        if(m_root.getLeft() == null)
        {
           m_root.setLeft(newNode);
           m_size++;
        }
        else if(m_root.getLeft() != null)
        {
           if(v < m_root.getLeft().getInfo())
           {
              m_root.getLeft().setLeft(newNode);
              m_size++;
           }
           else if(v > m_root.getLeft().getInfo())
           {
              m_root.getLeft().setRight(newNode);
              m_size++;
           }
        }
    }
    else if(v > m_root.getInfo())
    {
        if(m_root.getRight() == null)
        {
           m_root.setRight(newNode);
           m_size++;
        }
        else if(m_root.getRight() != null)
        {
           if(v > m_root.getRight().getInfo())
           {
              m_root.getRight().setRight(newNode);
              m_size++;
           }
           else if(v < m_root.getRight().getInfo())
           {
              m_root.getRight().setLeft(newNode);
              m_size++;
           }
        }
    }
}

为了():

// print the tree content using in-order traveral
public void inOrder()
{   
    // TODO: implement this method using a non-recursive solution
    BSTNode current = m_root;
    Stack<BSTNode> stack = new Stack<BSTNode>();
    while(true)
    {
        if(current != null)
        {
           stack.push(current);
           //current = m_root.getLeft();
           m_root.setLeft(current);
           //current.setLeft(current.getLeft());
        }
        else
        {
           if(stack.isEmpty())
           {
              break;
           }
           //stack.pop();
           System.out.println(stack.pop());
           m_root.setLeft(current);
           //current = m_root.getLeft();
           //current.getRight();
        }
    }
}
4

0 回答 0