我正在尝试将游标移动到二叉树中的父节点。我想以递归方式执行此操作而不使用保持节点来跟踪父节点。我认为我的基础/停止案例是正确的,但我相信最后两个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();
}
}
答案 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()
并使用==
运算符,因为它应该比较节点的引用。