2012-07-06 50 views
2

我想显示一个树结构。我真的需要给用户/树一个预定义的硬编码根节点,比如“RootUnit”,他可以添加他的孩子或子孙吗?树应该只有一个根节点

添加节点时,这是否有意义或仅导致麻烦?

+0

你应该添加一个标签对应于你正在使用的语言/框架... – assylias 2012-07-06 16:49:21

+1

只有一种语言我会使用:P – Pascal 2012-07-06 16:52:17

+3

@Pascal:Pascal? ;) – Piskvor 2012-07-06 16:54:49

回答

1

树应该只有一个根。但是你不需要硬编码一个根。只要将第一个创建的树节点视为根。

+0

然后,我会检查每次添加节点时,如果nodes.count == 0或nodes == Null then newNode.parent = null。我不喜欢那很麻烦。 – Pascal 2012-07-06 16:51:47

+0

不是,当你创建一个根时,你就知道它。只需正常创建节点,当父节点为NULL时,即创建一个根。 – Rango 2012-07-06 17:10:15

+0

用户没有AddRoot按钮。只是一个添加节点按钮,所以我必须总是做一个计数或父母==空检查现有的节点等 – Pascal 2012-07-07 11:23:08

4

如果你有两个根,那么你有两棵树。

+0

这不是对我的问题的回答,而是对树木的一般性陈述。 – Pascal 2012-07-09 18:54:33

+0

@Pascal - 你的问题是“树应该只有一个根节点”,答案应该是“是”,但Stackoverflow不允许这么简短的答案。我想你有一个更深的问题,但通读你的问题的其余部分,它仍然没有我。 – LosManos 2012-07-09 21:19:11

+0

看看我的问题的最后部分:“...或者在添加节点时只会造成麻烦...”我想讨论这个场景,考虑到用户有一个add_descendant和add_children按钮。 – Pascal 2012-07-10 13:01:22

0

与其为每个节点使用相同的构造函数,都提供一个用于根节点的默认构造函数,而另一个用于其他所有节点。这不是丑陋的,它的工作原理。

public Node() 
{ 
    // Set properties if you'd like. 
    // such as having no children yet or whatnot. 
} 

public Node(Node parent) 
{ 
    // Similar to Node() 
} 

请参阅!很好,很干净。

+0

从哪里可以知道何时调用重载的Note构造函数?没有添加根节点按钮。这也是没有道理的。 – Pascal 2012-07-09 18:55:37

1

根据定义,树只有一个根,每个子节点只有一个父节点(没有父节点的根除外)。如果这些限制不符合,那么你的树不再是一棵树,而是一个图(面向或不是)

1

它取决于上下文。从严格的数学定义来看,树中不能有多个根节点。但是,有些树的实现可以忽略它,并且无论如何都有多个顶级节点(例如您用这个问题标记的TreeView控件)。您只需要问问自己,如果您的特定程序在多个顶级节点中会更好或更差。鉴于我们对您的计划一无所知,这不是我们真正能为您做出的决定。

相关问题