由于代码太长,链接就在这里 - > http://pastebin.com/jXgbE6bB
因为我不太擅长递归,所以我找不到适合这个问题的递归函数。
(PSI我是这个论坛的新手,我知道我会有很多讨厌的评论,比如为什么不去寻找关于递归和其他事情的教程,但相信我,我已经做了一切,但我只是不能理解逻辑递归)
我的问题是二进制搜索树中给定元素的有序后继的递归函数是什么?我做了这么远,但它只返回它应该的节点的父节点印刷:
public E getSuccessor(BNode<E> t, E x) {
if(t.left!=null && x.equals(t.info)){
return t.left.info;
}
else if(x.compareTo(t.info)<0){
return (getSuccessor(t.left, x));
}
else {
return (getSuccessor(t.right, x));
}
}
public E getSuccessor(E x) {
return getSuccessor(root, x);
}
答案 0 :(得分:2)
给定节点的inorder后继节点是该节点的右子树中的最低节点。为了另外理解,它是下一个节点,它将以简单的顺序遍历树的方式打印。
这是解决此问题的递归方法。在调用方法时,将root作为树的根,传递的继承者的节点需要为t,null作为后继者,因为该方法将计算它。类似于以下内容 -
BinaryTreeNode successor = tree.inorderSuccessor(root,node,null);
public BinaryTreeNode<Type> inorderSuccessor(BinaryTreeNode<Type> root,BinaryTreeNode<Type> t,BinaryTreeNode<Type> successor)
{
if(root==null)
return null;
if(root.element==t.element)
{
if(root.right!=null)
return findMin(root.right);
else
return successor;
}
int cmp=t.element.compareTo(root.element);
if(cmp < 0)
return inorderSuccessor(root.left,t,root);
else
return inorderSuccessor(root.right,t,successor);
}
public BinaryTreeNode<Type> findMin(BinaryTreeNode<Type> t)
{
if(t==null)
return t;
while(t.left!=null)
t=t.left;
return t;
}