早教吧 育儿知识 作业答案 考试题库 百科 知识分享

求树的遍历算法,现在知道树(注意不是单指二叉树)的根节点和后序遍历,而且可以知道每一个结点的父结点,求前序遍历.例如:(图例)这只是一个例子,我求得是算法阿.

题目详情
求树的遍历算法,
现在知道树(注意不是单指二叉树)的根节点和后序遍历,而且可以知道每一个结点的父结点,求前序遍历.
例如:(图例)
这只是一个例子,我求得是算法阿.
▼优质解答
答案和解析
使用孩子兄弟链表作为树的数据结构:每个结点有两个分支,左分支代表该结点的第一个孩子,右分支代表该结点的下一个兄弟.这样就可以将树转化为与二叉树类似的数据结构
该数据结构的C代码如下:
typedef struct CSNode {
ElemType data;
struct CSNode *firstchild,*nextsibling;
} CSNode,*CSTree;
容易证明,原树的先序遍历=二叉树的先序遍历,原树的后序遍历=二叉树的中序遍历
所以只要通过题目条件,建立起该树对应的二叉树,就很容易得到原树的先序遍历
按照如下的思路很容易建立对应二叉树:
将后序遍历序列反转,得到一个序列.
(很容易注意到,这个序列是一个从右向左的先序遍历)
以这个序列为模板,逐个考察该序列的元素
{若该元素没有父亲,
那么就是根结点;
若该元素的父亲的左指针为空,
(也就是说,它的父亲还没有挂孩子)
那么就把这个该元素挂到它父亲的左指针上暂时作为第一个孩子;
若该元素的父亲的左指针为另一个结点p,
(该元素与p有相同的父亲,但比p来得晚一些,这说明该元素比p更靠左)
那么
{把p挂到该元素的右指针上变成兄弟,把该元素挂到父亲的左指针上;}
}
这样一来,就得到了对应的二叉树
然后对二叉树做一个先序遍历,就得到了原树的先序遍历
我只提供一个思路,时间关系,具体代码我就不写了
相信这个对你来说只是举手之劳.
看了求树的遍历算法,现在知道树(注...的网友还看了以下:

小开到一早点摊买东西,下面是他和卖早点阿姨的对话.小开说:“我买这种包子8个,这种油条5根.”阿姨  2020-05-15 …

阿拉伯人和雅利安人为什么长得像?阿拉伯人和雅利安人为什么长得很像?是阿拉伯人的血统影响了雅利安人吗  2020-05-16 …

12.下列句子的句式特点与例句相同的一项是()例句:农人告余以春及A、访风景于崇阿B、而莫之夭阏者  2020-05-17 …

13..下列各句中句式特点与例句相同的一项是(3分)()例句:访风景于崇阿A.遂见用于小邑B.农人  2020-06-18 …

您好.直升机螺旋桨的升力怎记算阿?例如.桨叶长100厘米.宽20厘米.桨叶角度20度每秒30转.那  2020-06-23 …

用:“如果...如果...如果...都得”造句例如:如果我学得了一丝一毫的好脾气,如果我学得了一点  2020-06-29 …

地理地理的位置阿明“南辕北辙”,麦哲伦“东行西航”()A、两人都可回到出发地点B、麦哲伦能回到出发  2020-07-01 …

盆地的气候特点一般来说,是不是盆地的气候一般较为湿润,多雾雨?为什么呢?有没有特例?(高一的时候地  2020-07-15 …

请从“祥子、阿廖沙、尼摩船长”中挑选一个人物,仿照示例写读书心得。[示例1]杨志,一个梁山泊的英雄,  2020-11-01 …

有哪些词可以形容过往的事物?如题阿,例如:残年阿,有没有好点的词阿!有赏阿>  2020-11-28 …