Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data structures 二叉树到一般树_Data Structures - Fatal编程技术网

Data structures 二叉树到一般树

Data structures 二叉树到一般树,data-structures,Data Structures,我知道,从一棵普通树上,你可以构造一棵唯一的二叉树,但反过来是真的吗?i、 你能从二叉树中得到一个独特的通用树吗?我觉得不太可能。通常,二叉树区分左子树和右子树。然而,一般的树却没有 我们应该如何从这两个二叉树中得到一个唯一的通用树呢 X X / \ / \ Y Z Z Y 这两个怎么样 X X / \ Y Y 另一方面, 如果您选择不区分二叉树的左或右子树,或者选择尊重常规树中出现的序列子树,只需将每个二叉树映射到

我知道,从一棵普通树上,你可以构造一棵唯一的二叉树,但反过来是真的吗?i、 你能从二叉树中得到一个独特的通用树吗?

我觉得不太可能。通常,二叉树区分左子树和右子树。然而,一般的树却没有

我们应该如何从这两个二叉树中得到一个唯一的通用树呢

  X      X
 / \    / \
 Y Z    Z Y
这两个怎么样

  X      X
 /        \
 Y        Y
另一方面,


如果您选择不区分二叉树的左或右子树,或者选择尊重常规树中出现的序列子树,只需将每个二叉树映射到自身即可。这将是每个二叉树的唯一通用树。

是。以下转换是可逆的:

  X      X
 / \    / \
 Y Z    Z Y
给定一个具有有序但未索引的子级的通用树, 将第一个子节点编码为其父节点的左子节点,将其他每个节点编码为其(前)同级节点的右子节点

反之亦然: 给定一个具有区分左、右子节点的二叉树,读取节点的左子节点作为其第一个子节点,读取右子节点作为其下一个同级节点

那么,下面的树

  a
 /|\
b c d
   a
  / \
 b   c
 |
 d
编码为

  a
 /
b
 \
  c
   \
    d
     a
    /
   b
  / \
 d   c
而下面的树

  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

下面是从二叉树获取唯一通用(无向)树的另一种方法:

  • 顶点二叉树可能有0…3个图邻居
  • 将12个节点附加到根节点
  • 将8个节点附加到每个左子节点
  • 将4个节点附加到每个右子节点
此操作是可逆的:

  • 使用至少12个邻居将节点标记为“根”。如果不是唯一的,则失败
  • 用8..11个邻居标记每个节点“左”
  • 用4..7个相邻节点标记每个节点“右”
  • 除掉所有叶子
  • 使所有边远离根部
  • 如果任何节点有多个左子节点或多个右子节点,则失败
所以

  • 有序根树和二叉树之间有一个双射(第一个和第二个算法)
  • 因为任何一般树都可以任意根,所以一般树(有向树或无向树)可以注入到二叉树
  • 从二叉树到一般无向树的注入(第三种算法)
  • 由于从二叉树到一般树以及从一般树到二叉树都有一个注入,所以在一般(有向或无向)树和二叉树之间必然存在一个双注入

我想你没有回答这个问题。我相信作者知道,从一棵普通树可以构造一棵唯一的二叉树。唯一的意思是可逆的。作者似乎明白这一点。作者在问,我们是否可以从二叉树构造唯一的一般树。@Haozhun这个答案描述了一种从二叉树构造一般有序根树的方法。既然它是正向变换的反转,它本身是可逆的。若我们考虑一般的树序,为什么还要麻烦这么复杂的事情呢?二叉树本身将起作用。@Haozhun两个不同的二叉图可能具有相同的子顺序:
(,)
(左子)
(,(,)
(右子)是不同的,但不是一般的树:
(())