本练习来自书籍"algorithms in c++"。假设有一个像这样的免费树
第一个问题:我们可以将这个免费树表示为二叉树吗?
我认为我们不能将这个自由树表示为二叉树 因为有些节点的子节点超过2个。
第二个问题:我们可以从这个免费树中代表多少个有序树?
我无法理解这个问题。节点中没有键来决定如何创建有序树。
答案 0 :(得分:1)
如果我正确地理解了这个问题,那么任务就是将树表示为二叉树,即使用二叉树的数据结构来表示任意树。从结构上说,这个问题需要一种方法来将任意树映射到二叉树。
该技术被描述为here;基本的想法是通过任意选择的孩子来表示节点c_1,...c_n
的孩子a
,这可能超过两个,比如说c_1
,它成为{{a
的左子。 1}}。作为c_1
的正确孩子,存储下一个孩子c_2
;等等。这意味着对于每个节点,一个子节点存储在左子树中,而在右子节中通过总是选择正确的子节点,存储子节点的“替代”的“兄弟姐妹”。该方法可以如下勾画。请承担相对较差的文字表示。
arbitrary tree
a
/ | | \
c_1 c_2 c_3 c-4
binary tree
a
/
c_1
\
c_2
\
c_3
\
c_4