当前位置: 首页 > 知识库问答 >
问题:

二叉树的双线程树

司空锋
2023-03-14

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

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

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

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; 

}

我的最初方法是递归地调用一个helper方法,如下所示:

ThreadNode 助手(BinaryNode n、BinaryNode 前任、BinaryNode 后继)

共有1个答案

怀齐智
2023-03-14

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

 类似资料:
  • 大家好,我应该编写ThreadedNode()类,但是我遇到了一些问题。 我理解,一个二叉树的线程二叉树是通过在顺序遍历中将每一个null左子级设置为节点的前导,在顺序遍历中将每一个null右子级设置为节点的后继来获得的。 但是,我的问题是从构造函数//线程(二叉树)开始的,当您被赋予根公共线程节点(BinaryNode根) 我知道它接收一个binaryNode,我必须使它成为一个线程树,但我如何

  • 线索二叉树 二叉树的叶子节点会有一些空的指针,如果有n个节点则会有n+1个空指针域,将这些空指针域利用起来存在该二叉树为某一种遍历次序下的前驱节点和后继节点的二叉树成为线索二叉树。根据线索二叉树性质不同分为前序线索二叉树,中序线索二叉树,后续线索二叉树。 一个节点的前一个节点为前驱节点,一个节点的后一个节点为后继节点 核心思想 当线索化二叉树的时候left和right就分为两种情况 left指向左

  • 二叉树 二叉树采用二叉链表存储,要求根据给定的先序遍历序列和中序遍历序列建立二叉树,并输出后序遍历序列、结点总数、叶子数、度为1的结点数、度为2的结点数。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据的第一行输入结点数n(1≤n≤10),第二、三行各输入n个整数,分别表示二叉树的先序遍历序列和中序遍历序列。 输出格式: 对于每组测试,在一行上分别输出该二叉树的后序遍历序列,结点总数,叶子

  • 主要内容:什么是二叉排序树?,使用二叉排序树查找关键字,二叉排序树中插入关键字,二叉排序树中删除关键字,总结前几节介绍的都是有关静态 查找表的相关知识,从本节开始介绍另外一种查找表—— 动态查找表。 动态查找表中做查找操作时,若查找成功可以对其进行删除;如果查找失败,即表中无该关键字,可以将该关键字插入到表中。 动态查找表的表示方式有多种,本节介绍一种使用树结构表示动态查找表的实现方法—— 二叉排序树(又称为 “二叉查找树”)。 什么是二叉排序树? 二叉排序树要么是空 二叉树,要么具有如下特点:

  • 我试图实现一个二叉树(不是二叉搜索树)。它主要是一个由insert/delete/search和clear过程组成的类模板。节点中保存的数据可以是任何东西。如下所示: 我需要一些算法方面的帮助,最好是迭代的(由于堆栈大小的限制,希望避免递归的),以用于插入、搜索和删除:

  • 编写一个Lisp程序来检查一个二叉树是否是二叉搜索树。 我正在尝试编写一个二进制递归方法,但我是一个初学者,我不知道从这里去哪里。