我正在通过为Ruby编写树库来研究树遍历算法。就基本建筑而言,似乎有两个合理的选择;
其中一种设计更常见吗?在这个库的开发过程中,1)太幼稚或2)不必要的冗余会变得“明显”吗?本图书馆的预期用途为一般用途;我希望它可以用于巨树、二进制搜索树或解析树等。
我能想到其他不那么合理的建筑;
3) 树是节点的集合。树有一个根节点。节点有一个值和子节点。没有子树的概念。
4)如果我选择了一个只有节点的体系结构,我不能合理地问节点诸如“这棵树中有多少节点”或“平衡这棵树”。
我从两个方面研究过树木。第一个是,只有节点具有属性(通常是数据引用、子引用,可能还有父引用)和行为。这很好用,因为没有单独的树
数据类型。但它也有缺点,因为空树由空节点表示。因此,您的代码中充满了以下内容:
if (tree == null)
tree = node;
else
tree.Insert(node);
检查null会导致代码难以读取。
不过,一个好处是,可以将任何节点视为一棵树。例如,你可以写:
tree.Right.CountNodes();
这将返回右子树的节点数。
因此,创建一个包含节点的树
数据结构。现在,节点只是数据,树具有行为。在内部,有一个根节点可以为null,树
行为必须处理它。但客户机代码只能写:
tree.Insert(node);
您仍然可以计算子树中的节点,不过:
tree.CountNodes(node); // counts nodes in the subtree rooted at node
你使用哪种设计在很大程度上取决于风格。我发现更容易构建一个树
数据结构,从而抽象出处理节点之类的复杂问题。
问题内容: 我正在使用nltk的Tree数据结构来处理parsetree字符串。 但是,数据结构似乎受到限制。是否可以通过其字符串值获取节点,然后导航至顶部或底部? 例如,假设您要获取字符串值为 ‘nice’ 的节点,然后查看其父级,子级等是什么?可以通过nltk的Tree实现该节点吗? 问题答案: 对于NLTK 3.0,您想使用ParentedTree子类。 http://www.nltk.or
我正在用python处理树,这就是我试图解决的问题。 我所有的节点都有列表。对于每个父母,通过一次删除一个元素,从父母列表中提取孩子的列表。 假设node1是列表1[1,2,3],我希望node1有3个子项(在本例中),其中每个子项都是通过每次删除一个项从列表1中提取的列表。所以node2=[2,3]node3=[1,3]和node4=[1,2] 我正在使用anytree库,但在复杂节点上找不到足
本文向大家介绍数据结构中的点四叉树,包括了数据结构中的点四叉树的使用技巧和注意事项,需要的朋友参考一下 点四叉树是为表示二维点数据而实现的二叉树的改编。所有四叉树的特征由点四叉树共享。 在比较通常在O(log n)时间执行的二维有序数据点时,它通常非常有效。点四叉树的完整性值得一提,但kd树已超越它们成为广义二分搜索的工具。 点四叉树的构建如下。 给定下一个要插入的点,我们计算它所在的单元格并将其
问题内容: 是否有一个良好的可用(标准Java)数据结构来表示Java中的树? 具体来说,我需要代表以下内容: 任何节点上的树都可以有任意数量的子代 每个节点(在根之后)只是一个字符串(其子代也是字符串) 我需要能够获得代表给定节点的输入字符串的所有子代(某种形式的列表或字符串数组) 是否有可用的结构或者我需要创建自己的结构(如果这样的话,实施建议会很好)。 问题答案: 这里: 那是可用于或任
期望结果: 补充 结合边城用户的文章,最后得出的方法:
如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?