知识大全 数据结构考研分类复习真题 第六章 答案 (五)[43]
Posted 结点
篇首语:少年乘勇气,百战过乌孙。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第六章 答案 (五)[43]相关的知识,希望对你有一定的参考价值。
[题目分析]在中序穿线树中找结点的双亲 最简单情况是顺线索就可找到 例如 结点的左子女的右线索和右子女的左线索都指向双亲 但对于有左右子女的结点来说 则要利用中序穿线树中线索 向上 指向祖先的特点 若结点p是结点q右子树中中序遍历最左下的结点 p的左线索指向q 若结点p是结点q左子树上中序遍历最右下的结点 p的右线索指向是q 反过来 通过祖先找子女就容易了 另外 若结点q的后继是中序穿线树的头结点 则应特殊考虑
void FFA(BiThrTree t p q)//在中序穿线树t上 求结点p的双亲结点q q=p; //暂存 while(q >RTAG== ) q=q >RLINK; //找p的中序最右下的结点 q=q >RLINK; //顺右线索找到q的后继(p的祖先结点) if (q==t) q=t >LLINK; //若后继是头结点 则转到根结点 if (q==p) printf( 根结点无双亲\\n ) return; if (q >LLINK==p) return(q); else q=q >LLINK; //准备到左子树中找p while (q >RLINK!=p) q=q >RLINK return(q); //找最右结点的过程中回找到p //结束FFA
[算法讨论]本题也可以先求结点p最左下结点的前驱线索 请读者自己写出算法
[题目分析]带头结点的中序线索树 其头结点的lchild指向二叉树的根结点 头结点的rchild域指向中序遍历的最后一个结点 而二叉树按中序遍历的第一个结点的lchild和最后一个结点的rchild指向头结点 故从头结点找到根结点后 顺 后继 访问二叉树 在中序线索树中 找前序的后继 已在第 题进行了详细的讨论 这里不再赘述 中序线索树在上面的 四 应用题 已画过多个 这里也不重复
void PreorderInThreat(BiTrhTree tbt) //前序遍历一中序全线索二叉树tbt tbt是头结点指针 bt=tbt >lchild; while(bt) while(bt >ltag== )printf(bt >data); bt=bt >lchild;//沿左分枝向下 printf(bt >data); //遍历其左标志为 的结点 准备右转 while(bt >rtag== && bt >rchild!=tbt) bt=bt >rchild;//沿右链向上 if (bt >rchild!=tbt) bt=bt >rchild;//沿右分枝向下 //结束PreorderInThreat
时间复杂度O(n)
cha138/Article/program/sjjg/201311/23699相关参考