1、设一棵树t中边的集合为,要求用孩子兄弟表示法(二叉链表)表示出该树的存储结构并将该树转化成对应的二叉树。
2、冒泡排序算法是把大的元素向上移(气泡的上浮),也可以把小的元素向下移(气泡的下沉)请给出上浮和下沉过程交替的冒泡排序算法。
48.有n个记录存储在带头结点的双向链表中,现用双向起泡排序法对其按上升序进行排序,请写出这种排序的算法。(注:双向起泡排序即相邻两趟排序向相反方向起泡)
3、二叉树的层次遍历序列的第一个结点是二叉树的根。实际上,层次遍历序列中的每个结点都是“局部根”。确定根后,到二叉树的中序序列中,查到该结点,该结点将二叉树分为“左根右”三部分。
若左、右子树均有,则层次序列根结点的后面应是左右子树的根;若中序序列中只有左子树或只有右子树,则在层次序列的根结点后也只有左子树的根或右子树的根。这样,定义一个全局变量指针r,指向层次序列待处理元素。算法中先处理根结点,将根结点和左右子女的信息入队列。
然后,在队列不空的条件下,循环处理二叉树的结点。队列中元素的数据结构定义如下:
typedef struct
int lvl层次序列指针,总是指向当前“根结点”在层次序列中的位置。
int l,h中序序列的下上界。
int f层次序列中当前“根结点”的双亲结点的指针。
int lr1—双亲的左子树 2—双亲的右子树。
qnode;
bitree creat(datatype in,level,int n)
/由二叉树的层次序列level[n]和中序序列in[n]生成二叉树。 n是二叉树的结点数。
if (n<1)
qnode s,qq是元素为qnode类型的队列,容量足够大。
init(q); int r=0; /r是层次序列指针,指向当前待处理的结点。
bitree p=(bitree)malloc(sizeof(binode生成根结点。
p->data=level[0]; p->lchild=null; p->rchild=null; /填写该结点数据。
for (i=0; iif (in[i]==level[0]) break;
if (i==0) /根结点无左子树,遍历序列的1—n-1是右子树。
p->lchild=null;
enqueue(q,s);
else if (i==n-1) /根结点无右子树,遍历序列的1—n-1是左子树。
p->rchild=null;
enqueue(q,s);
else //根结点有左子树和右子树。
左子树有关信息入队列。
右子树有关信息入队列。
while (!empty(q)) 当队列不空,进行循环,构造二叉树的左右子树。
s=delqueue(q); father=
for (i= i<= i++)
if (in[i]==level[ break;
p=(bitreptr)malloc(sizeof(binode申请结点空间。
p->data=level[ p->lchild=null; p->rchild=null; /填写该结点数据。
if ( father->lchild=p;
else father->rchild=p; /让双亲的子女指针指向该结点。
if (i==
p->lchild=null处理无左子女。
enqueue(q,s);
else if (i==
p->rchild=null; /处理无右子女。
enqueue(q,s);
else//结束while (!empty(q))
return(p);
//算法结束。
2023年河南省数据理论章程
1 假设k1,kn是n个关键词,试解答 试用二叉查找树的插入算法建立一棵二叉查找树,即当关键词的插入次序为k1,k2,kn时,用算法建立一棵以llink rlink 链接表示的二叉查找树。2 若第n件物品能放入背包,则问题变为能否再从n 1件物品中选出若干件放入背包 这时背包可放入物品的重量变为s ...
2023年山西省重要数据加强
typedef struct 沿左分枝向下。if bt p 不失一般性,假定p在q的左侧,遇结点p时,栈中元素均为p的祖先结点。for i 1 i top i s1 i s i top1 top 将栈s的元素转入辅助栈s1 保存。if bt q 找到q 结点。for i top i 0 i 将栈中元...
2023年河南省政法干警
2011年河南省政法干警招录培养体制改革试点招考部分专业职位体检标准界定的意见。2011年河南省政法干警体制改革试点公安机关职位委托培养的院校共有三所 公安大学 刑警学院 河南警察学院 其中公安大学 刑警学院培养的专业有技术侦查 警务指挥与战术 国内安全保卫 网络安全与执法 公安情报学 刑事科学技术...