我刚刚开始学习二叉树。在给定Inorder和Postorder或Inorder和Preorder的情况下,有没有一种算法来找出二叉树结构?我一直在尝试手动操作,但它从来没有出来correct.For例如-这两个是有效的顺序和后序遍历一个给定的树:
顺序:D B F E A G C L J H K后序:D F E B G L J K H C A
显然,A是根元素,因为它是Postorder中的最后一个元素。现在按顺序看,左边的子树变成:{D B F E},右边的子树变成{G C L J H K}。右子树的根将是前序中倒数第二的元素,即C。我现在可以进一步划分右子树(以C为根),给出{G}作为右子
给定一些文本文件,我需要读取每个字母数字字符并使用对它们进行编码。
读取字符、存储概率和创建节点,以及使用指针创建Huffman的trie。
但是,我需要使用二叉树的顺序表示来创建和初始化Huffman树,而不需要任何指针。
这可以通过使用指针创建一个常规树来完成,然后将其读入数组中,但是我的目标是直接填充一个带有节点的数组。
我考虑创建较小的树并将它们合并在一起,但选择了矩阵表示,在这种表示中,我将从二进制堆中收集具有最小概率的元素,并将它们存储到矩阵的行中,其中矩阵的行将以相反的顺序表示节点应该在二叉树中的级别。
E.g. Given characters and their probab
我正在尝试将DAG转换为二叉树。考虑下面的图表
我想为上面的树提供以下输出。
因为A,B,C,E形成一颗钻石,为了把它转换成树,我需要把B和C移动到一条线上。
我试过以下几点:
拓扑排序:输出为A -> D -> B -> C -> E -> F.拓扑排序为:a -> B,C,D -> E -> F
拓扑路径给了我们一条直线路径。但是,如果可能的话,我希望保留这个序列,即A -> D。但是,如果有一个菱形,我希望一个节点只有一个父节点,并且对这些父节点进行排序。
对于上述情况,是否有方法从DAG生成树?
我创建了描述二叉树的新类型
data BinTree a = Null | Num a (BinTree a) (BinTree a)
deriving (Show)
并创建了以下函数:
treehandle :: BinTree a -> Bool
treehandle a = True
检查至少输入值。
当输入值为Null时,程序输出结果成功,但不能输入二叉树。我试图这样做:
treehandle (5 (Null) (Null))
但获得:
<interactive>:66:13:
No instance for (Num (BinTree a1 -> BinTr
我知道如何从一般的树转换成二叉树,
a a
/ | \ /
b c d -> b
\
c
\
d
我刚刚被问到如何从一般的树转换成二叉树。我的想法是,问我的人要么不是指二叉搜索树(我问他,他说他指的是),要么是他误解了课堂笔记中的某些东西。无论如何,有没有人听说过这样做?从通用树到二叉搜索树?我给他的答案是首先转换成二叉树,然后对其进行排序,得到二