|
发表于 2017-8-7 03:11:31
|
显示全部楼层
3.二叉树BT恢复成森林F(BTÞF)
这是FÞBT的逆变换。
方法:对BT中任一结点,其Lchild所指结点仍为孩子,而Rchild所指结点为它的右兄弟,即“左孩子,右兄弟”。
先序遍历森林F
设F={ T1,T2,………..,Tm },其中Ti(1≤i≤m)为F中第i棵子树。
方法:若F≠φ,则:
(1)访问F中T1之根;
(2)先序遍历T1之根下的各子树(子森林);
(3)先序遍历除T1之外的森林(T2,……,Tm)。
显然(2)、(3)为递归调用,即:若子森林存在,仍按先序遍历方法对其遍历。
方法等价为:先将F转换二叉树BT,然后对BT按前序(DLR)遍历,其结果是一样的。
后序遍历森林F
方法:若F≠φ,则:
(1)后序遍历F中T1之根下的各子树(子森林);
(2)访问T1之根;
(3)后序遍历除T1之外的森林{ T2,……,Tm }。
显然,(1)、(3)递归调用,即:若子森林存在,仍按后序遍历方法对其遍历。
此方法等价为:先将F转换成二叉树BT,然后对BT按中序(LDR)遍历
例题:设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有( C )个。 我不明白的题
A. n-1 B.n C. n+1 D. n+2
Huffman树
设H树中叶结点数为n(即给定的权值个数),因H树中出度=1的结点数为0,出度=2的结点数为n-1,故H树中总的结点数m=2n-1。因而可将树中全部结点存储在一个一维数组中。因而可将树中全部结点存储在一个一维数组中。
由此写出构造H树的C语言描述算法:
|
|