我需要一个纯.Net持久散列表/二进制树,功能类似于berkeley-db Java版.
在功能上它应该与DHT类似,如memcached和速度等,但它不必分发.本质上,我正在寻找一个持久的哈希表.
有没有人有任何想法或建议?
类似的问题也在这里:在C#中寻找一个简单的独立持久字典实现
保罗
我被告知java类TreeMap使用RB树的实现.如果是这种情况,如何在TreeMap上进行顺序,预订和后序树步行?
或者这不可能吗?
我不是指二进制搜索树.
例如,如果我将值1,2,3,4,5插入到二叉搜索树中,则inorder遍历将给出1,2,3,4,5作为输出.
但是如果我将相同的值插入到二叉树中,则inorder遍历应该给出4,2,5,1,3作为输出.
可以使用动态数组创建二叉树,其中对于索引n中的每个元素,2n + 1和2n + 2分别表示其左和右子节点.
因此,表示和级别顺序遍历在这里非常容易.
但我认为,有序,下订单,预订很难.
我的问题是如何创建二叉树像二叉搜索树.即.有一个包含数据的树类,左右指针而不是数组.这样我们就可以递归地进行遍历.
这是一项家庭作业,我没有太多时间在上面,但是我知道一些答案,需要一点帮助
我想这样假设我们有:
1个节点----> 1级
2,3个节点----> 2级
3,4,5,6,7个节点----> 3级
4,5,6,.....,15个节点----> 4级
5,6,7,8,9,.....,31个节点----> 5级
从[min = X个节点到max = 2 ^ X-1个节点]的节点间隔,其中X代表级别
从现在开始我很困惑如何完成
我有一个树结构,其节点具有父ID(无限子节点).出于显示目的,我需要这个树结构作为二叉树.我如何做到这一点是在每个级别节点根据条件分组到一个节点.选择节点后,将显示其子节点.例:
绿色是条件true,红色是false

B,C已分组到左侧节点,D,E根据其条件在右侧.
问题:我正在使用KnockoutJS来显示我的树,我需要能够执行常规树操作,例如根据其ID获取节点,插入节点删除节点.这是我的结构.有没有更好的结构/方式来做到这一点?
var tree = [
{ groupNodeId: "A", childNodes: [
{ nodeId: "A", childGroupNodes: [
{ groupNodeId: "B", condition: true, childNodes: [
{ nodeId: "B", childGroupNodes: []},
{ nodeId: "C", childGroupNodes: []}
]},
{ groupNodeId: "D", condition: false, childNodes: [
{ nodeId: "D", childGroupNodes: []},
{ nodeId: "E", childGroupNodes: []}
]}
]}
]}
];
Run Code Online (Sandbox Code Playgroud) 最近,我正在尝试解决CLRS中的所有练习.但有一些我无法弄清楚.这是其中之一,来自CLRS练习12.4-2:
描述n个节点上的二叉搜索树,使得树中节点的平均深度为Θ(lg n),但树的高度为ω(lg n).给出n节点二分搜索树高度的渐近上界,其中节点的平均深度为Θ(lg n).
任何人都可以分享一些想法或参考来解决这个问题吗?谢谢.
algorithm binary-tree asymptotic-complexity clrs data-structures
如果我构造一个二进制搜索树,按顺序添加以下值:
10, 7, 16, 12, 5, 11, 2, 20, 1, 14
Run Code Online (Sandbox Code Playgroud)
我得到一个高度为5的树.是否有一个方法(除了试验和错误)我可以用来确定一个整数的排序,它将创建一个高度为4的树?
我正在传递一个表示数学公式的二进制AST.每个内部节点都是运算符,叶节点是操作数.我需要走树并以中缀表示法输出公式.通过使用递归算法(例如Print()下面显示的方法)遍历树,这很容易实现.该Print()方法的问题在于转换为中缀时操作顺序丢失,因为没有生成括号.
我编写了PrintWithParens()输出正确的中缀公式的方法,但它添加了无关的括号.您可以在我的main方法的四个案例中的三个中看到它在没有必要时添加括号.
我一直绞尽脑汁试图弄清楚PrintWithMinimalParens()应该是什么样的正确算法.我确信必须有一个算法只能在必要时输出括号来组合术语,但是我无法正确实现它.我想我必须要查看当前节点下面树中运算符的优先级,但我现在的算法不起作用(参见我的main方法中的最后两种情况.不需要括号,但是我的逻辑添加它们).
public class Test {
static abstract class Node {
Node left;
Node right;
String text;
abstract void Print();
abstract void PrintWithParens();
abstract void PrintWithMinimalParens();
int precedence()
{
return 0;
}
}
enum Operator {
PLUS(1,"+"),
MINUS(1, "-"),
MULTIPLY(2, "*"),
DIVIDE(2, "/"),
POW(3, "^")
;
private final int precedence;
private final String text;
private Operator(int precedence, String text)
{
this.precedence = precedence;
this.text = text;
}
@Override
public String toString() …Run Code Online (Sandbox Code Playgroud) 我有一个表示类型签名的数据结构,这个数据结构是在第一个图片中作为红色示例的树.我想得到黑色的,到目前为止我只得到了橙色的(第二张图片),这是类型树但与左边相关联.

这是我到目前为止的橙树(遵循橙色箭头)

我通过漂亮打印树然后用解析器组合器解析它来解决了这个问题,但这种效率低下是不可取的.我想我可以有另一种算法从橙树转换为黑树,但如果不是组合两种算法,我只能写一种算法会更好.
我将此标记为Haskell,因为我正在编写我的解决方案.我可以提供代码来获取像红树这样的数据结构,但我认为它只会使解决方案的尝试复杂化.
我想知道这个算法是否有名称和/或红树中操作员位置的名称是什么.是前缀吗?
谢谢.
我正在尝试执行树的顺序遍历.代码本身感觉正确,除非它不能正常工作.我有一种感觉,它必须与if条件,如何附加在python中工作,或者可能与返回.如果我使用print而不是return,这可以正常工作,我想,但我希望能够使用return并仍然得到正确的答案.例如,对于树[1,None,2,3],我的代码返回[1],这显然是不正确的.
另外,使用列表理解可以解决这个问题吗?如果是这样,我们将非常感谢任何示例代码.
这是我的代码:
class Solution(object):
def inorderTraversal(self, root):
res = []
if root:
self.inorderTraversal(root.left)
res.append(root.val)
self.inorderTraversal(root.right)
return res
Run Code Online (Sandbox Code Playgroud)
在将此标记为重复之前,我知道在Stackoverflow上已经有人询问遍历(很多次),但是没有一个能帮助我理解为什么我的理解是错误的.如果有人帮助我学习如何纠正我的方法而不是简单地发布另一个没有解释的链接,我将非常感激.非常感谢!
binary-tree ×10
algorithm ×3
tree ×3
.net ×1
berkeley-db ×1
c# ×1
clrs ×1
dht ×1
hashtable ×1
haskell ×1
inorder ×1
java ×1
javascript ×1
knockout.js ×1
list ×1
python ×1
treenode ×1