我很抱歉提出这个问题,但我找不到令人满意的答案。我已经阅读了很多关于有序树的来源,它们包括这样的解释:有序树是一个树,每个节点的子节点按特殊规则排序。有序树有一个实例:
7
/ | \
3 10 4
/ \ / \
12 8 11 2
第三级是有道理的,因为3岁的孩子和4岁的孩子都是以降序格式排序的。我认为7岁的孩子之间没有任何顺序,但这棵树是作为有序树的例子。
答案 0 :(得分:1)
您能分享阅读算法介绍的页面吗?我找不到。
树的节点顺序与节点中包含的元素的顺序之间存在误解。
如果每个孩子有一个孩子是第一个孩子,另一个是第二个孩子,依此类推,则排序一棵树。 就这样。不知道节点的元素是什么,就知道哪个是第一个,等等。
对于二叉树,它将是:有一个节点是左节点,另一个是右节点。现在,您想成为哪个左一个,而您想成为哪个右一个,这是一个不同的讨论。
问题在于,在示例中,节点始终是数字,因此您认为顺序与数字的值有关。不,数字只是节点上插入的元素。
现在,假设我有这棵树:
Morris
/ | \
/ | \
Smith Anderson Cooper
我想存储此信息,然后以这种方式在屏幕上重新创建它。我会使用有序树吗?是的,这些节点是有序的:在孩子列表中,史密斯的节点排在第一位,安德森的节点排在第二位。这是树的order属性。元素之间的顺序是什么?无:是任意的。
现在,对于搜索树,存在二阶关系。节点将具有通常从元素派生的键,并基于该键的值定义在何处插入元素。密钥的值需要遵循总顺序关系(https://en.wikipedia.org/wiki/Total_order)。这将是您定义的规则,但是该定义在其他示例中将不起作用,因为没有规则,它是任意的(除非可以将任意性视为规则?无规则是规则?)。>
一种可能更简单的表达方式是,如果对于每个节点,树的子级存储在列表中,则对树进行排序。根据定义,列表是有序的数据结构。也就是说,一个元素将成为第一个元素,另一个将成为第二个元素,依此类推。即使您存储数字,这些数字也可能不是按顺序排列的,但是列表本身具有顺序。