使用java在BST中递归给定元素的顺序后继元素
因为代码太长,链接在这里-> 因为我不太擅长递归,所以找不到适合这个问题的递归函数。使用java在BST中递归给定元素的顺序后继元素,java,recursion,binary-search-tree,inorder,Java,Recursion,Binary Search Tree,Inorder,因为代码太长,链接在这里-> 因为我不太擅长递归,所以找不到适合这个问题的递归函数。 (另外,我是这个论坛的新手,我知道我会有很多讨厌的评论,比如为什么不去找递归教程和其他东西,但相信我,我已经做了所有事情,但我就是不理解递归的逻辑) 我的问题是,在二元搜索树中,给定元素的顺序后继者的递归函数是什么?我做了这么多,但它只返回它应该打印的节点的父节点: public E getSuccessor(BNode<E> t, E x) { if(t.left!=null &&
(另外,我是这个论坛的新手,我知道我会有很多讨厌的评论,比如为什么不去找递归教程和其他东西,但相信我,我已经做了所有事情,但我就是不理解递归的逻辑)
我的问题是,在二元搜索树中,给定元素的顺序后继者的递归函数是什么?
我做了这么多,但它只返回它应该打印的节点的父节点:
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);
}
public E getsuccession(BNode t,ex){
如果(t.left!=null&&x.equals(t.info)){
返回t.left.info;
}
否则,如果(x.compareTo(t.info)给定节点的顺序后继节点是该节点右子树中的最低节点。否则,将在树的简单顺序遍历中打印下一个节点
如果节点具有正确的子节点,则此解决方案简化为在正确的子树中查找最小的节点
如果节点没有正确的子节点,并且没有父指针,那么我们需要从树的根开始,以我们的方式确定这个后续节点
下面是解决这个问题的递归方法。调用该方法时,将root作为树的根传递,后续节点需要为t,null作为后续节点,因为该方法将计算它-
BinaryTreeNode successor=tree.inorderSuccessor(根,节点,null)
ordersuccessor中的公共二进制树节点(二进制树节点根、二进制树节点t、二进制树节点后继者)
{
if(root==null)
返回null;
if(root.element==t.element)
{
if(root.right!=null)
返回findMin(root.right);
其他的
返还继承人;
}
int cmp=t.element.compareTo(root.element);
if(cmp<0)
在OrderSuccessor中返回(root.left,t,root);
其他的
在OrderSuccessor中返回(root.right,t,successor);
}
公共二进制树节点findMin(二进制树节点t)
{
如果(t==null)
返回t;
while(t.left!=null)
t=t左;
返回t;
}
您可以指定您的问题并在原始问题中发布相关代码吗?对不起,我编辑了我的帖子,所以现在应该更具体。但问题是我不应该只使用父节点从根节点开始,然后使用递归查找该元素的后继节点,这正是程序所做的-它只使用根节点。它不假设使用父指针。在整个程序过程中,我们识别一个节点并将其称为父节点。这与使用父指针非常不同。事实上,让我重命名所有内容以避免混淆。Tyvm作为我现在得到的解释。
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;
}