知识大全 数据结构考研分类复习真题 第六章 答案 (五)[39]
Posted 结点
篇首语:一身转战三千里,一剑曾百万师。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第六章 答案 (五)[39]相关的知识,希望对你有一定的参考价值。
[题目分析]在中序全线索化T树的P结点上 插入以X为根的中序全线索化二叉树 要对X有无左右子树进行讨论 并修改X左(右)子树上最左结点和最右结点的线索 在中序线索树上查找某结点p的前驱的规律是 若p >ltag= 则p >lchild就指向前驱 否则 其前驱是p的左子树上按中序遍历的最后一个结点 查找某结点p的后继的规律是 若p >rtag= 则p >rchild就指向后继 否则 其后继是p的右子树上按中序遍历的第一个结点
int TreeThrInsert(BiThrTree T P X) //在中序全线索二叉树T的结点P上 插入以X为根的中序全线索二叉树 返回插入结果信息 if(P >ltag== && P >rtag== ) printf( P有左右子女 插入失败\\n ) return( ); if(P >ltag== ) //P有左子女 将X插为P的右子女 if(X >ltag== ) X >lchild=P; //若X无左子树 X的左线索(前驱)是P else //寻找X的左子树上最左(下)边的结点 q=X >lchild; while(q >ltag== ) q=q >lchild; q >lchild=P; if(X >rtag== ) //修改X的右线索 X >rchild=P >rchild; //将P的右线索改为X的右线索 else //找X右子树最右面的结点 q=X >rchild; while(q >rtag== ) q=q >rchild; q >rchild=P >rchild; P >rtag= ;P >rchild=X; //将X作为P的右子树 //结束将X插入为P的右子树 else //P有右子女 将X插入为P的左子女 if(X >ltag== ) //X无左子女 X >lchild=P >lchild; //将P的左线索改为X的左线索 else //X有左子女 找X左子树上最左边的结点 q=X >lchild; while(q >ltag== ) q=q >lchild; q >lchild=P >lchild; if(X >rtag== ) X >rchild=P; //若X无右子树 则X的右线索是P else //X有右子树 查其右子树中最右边的结点 将该结点的后继修改为P q=X >rchild; while(q >rtag== ) q=q >rchild; q >rchild=P; P >ltag= ; //最后将P的左标记置 P >lchild=X; //P的左子女链接到X //结束将X插入为P的左子女 //结束Tree Thrfnsert
cha138/Article/program/sjjg/201311/23695相关参考