我知道从一般树中你可以构造一个唯一的二叉树,但是反过来呢?即你能从二叉树中得到一个唯一的通用树吗?
答案 0 :(得分:2)
是。以下转变是可逆的:
给定一个包含有序但未编入索引子项的常规树, 将第一个子节点编码为其父节点的左子节点,将每个其他节点编码为其(前)兄弟节点的右子节点。
相反的是: 给定带有区分左右儿童的二叉树,将节点的左子节点作为其第一个子节点,将右子节点作为其下一个兄弟节点。
所以,以下树
a
/|\
b c d
编码为
a
/
b
\
c
\
d
而下面的树
a
/ \
b c
|
d
编码为
a
/
b
/ \
d c
(阅读:d
是b
的第一个孩子,c
是a
的兄弟。
请注意,您可以通过为根指定兄弟来对任何有根森林(具有有序组件,否则表示不唯一)进行编码,因此
a
/ \
b c
\ \
d e
将被视为
a c e
/ \
b d
这是另一个方法,用于从二叉树中获取唯一的通用(无向)树:
此操作是可逆的:
所以,
答案 1 :(得分:1)
我觉得不太可能。通常,二叉树区分左小孩和右小孩。但是,一般树木没有。
我们如何从这两个二叉树中获得唯一的通用树。
X X
/ \ / \
Y Z Z Y
这两个怎么样?
X X
/ \
Y Y
另一方面,
如果您选择不区分二叉树的左子或右子,或者选择尊重子项出现在一般树中的序列,只需将每个二叉树映射到自身。这将是每个二叉树的唯一通用树。