Algorithm 二叉树的双线程树

Algorithm 二叉树的双线程树,algorithm,tree,binary-tree,binary-search-tree,Algorithm,Tree,Binary Tree,Binary Search Tree,我需要从一个常规的二叉树构建一个双线程树,如果可能的话使用递归。 这是我们正在使用的定义:二叉树的线程树是通过将每个空左子节点设置为索引顺序遍历中节点的前导节点,将每个空右子节点设置为索引顺序遍历中节点的后继节点而获得的 我找不到解决这个问题的办法,这里也有一些类似的帖子,但是没有解决办法。我只需要算法,它可以是任何语言 这是构造器,第二个是我需要做的: public ThreadedNode(T theElement, ThreadedNode<T> lt, ThreadedNod

我需要从一个常规的二叉树构建一个双线程树,如果可能的话使用递归。 这是我们正在使用的定义:二叉树的线程树是通过将每个空左子节点设置为索引顺序遍历中节点的前导节点,将每个空右子节点设置为索引顺序遍历中节点的后继节点而获得的

我找不到解决这个问题的办法,这里也有一些类似的帖子,但是没有解决办法。我只需要算法,它可以是任何语言

这是构造器,第二个是我需要做的:

public ThreadedNode(T theElement, ThreadedNode<T> lt, ThreadedNode<T> rt)
{
    element = theElement;
    left = lt;
    right = rt;
}

public ThreadedNode( BinaryNode<T> root)
{
    // implement it 
}



 //the fields

  private T element; 

  private boolean lThread = false;

  private ThreadedNode<T> left; 

  private boolean rThread = false;

  private ThreadedNode<T> right; 

}
公共线程节点(T元素、线程节点lt、线程节点rt)
{
元素=元素;
左=左;
右=rt;
}
公共ThreadedNode(二进制节点根)
{
//实施它
}
//田野
私有T元素;
private boolean lThread=false;
私有线程节点左;
私有布尔rThread=false;
私有线程节点权限;
}
我最初的方法是递归调用helper方法,如下所示:

ThreadNode帮助程序(BinaryNode n、BinaryNode前置程序、BinaryNode后续程序)

,最初前置子节点和后续子节点为空,但当我按顺序向下遍历树时,我使用当前节点及其父节点设置它们,这取决于它是左子节点还是右子节点,但我认为它并不适用于所有情况,我看不出如何改进它


提前感谢您

因为您提到它可以是任何语言,这是一个C实现,并提供了非常好的解释。

左指针非常简单。正确的指针有点难。看见也非常感谢Jim,我将“添加”您提供的2个链接的逻辑,我还没有找到双线程树的算法。