如何在不使用父引用节点的情况下在二叉树中找到光标的父级

时间:2016-11-07 05:12:28

标签: java binary-tree

我正在尝试将游标移动到二叉树中的父节点。我想以递归方式执行此操作而不使用保持节点来跟踪父节点。我认为我的基础/停止案例是正确的,但我相信最后两个if语句是错误的。我不确定如何去做。任何建议都会有所帮助。谢谢。

   public void cursorToParent()
{
    TreeNode parent = root;
    if(cursor == root )
        return;
    if(parent.getLeft().equals(cursor) || parent.getRight().equals(cursor) )
        cursor = parent;
    else
        if(parent.getLeft()!=null)
        {
            parent = parent.getLeft();
            cursorToParent();
        }
        if(parent.getLeft()!=null)
        {
            parent = parent.getLeft();
            cursorToParent();
        }

}

1 个答案:

答案 0 :(得分:0)

需要将current处理节点传递给该方法。因此,必须使用前一种方法cursorToParentImpl()调用方法root

public boolean cursorToParentImpl(TreeNode current)
{
    if(cursor == current )
        return false;
    if(current.getLeft () == cursor || current.getRight() == cursor) {
        cursor = current;
        return true;
    }
    else { // note the missing parenthesis too
        if(current.getLeft()!=null) {
            if (cursorToParentImpl(current.getLeft()))
                return true;
        }
        if(current.getRight()!=null) {
            if (cursorToParentImpl(current.getRight()))
                return true;
        }
    }
    return false;
}

并称之为:

public void cursorToParent()
{
    if (cursor == root)
        return;
    cursorToParentImpl(root);
}

此外,您可以避免调用equals()并使用==运算符,因为它应该比较节点的引用。