网站自适应是什么做的,青海省电话黄页,公司网站建设维护,全国建筑企业资质查询系统官网解#xff1a;思路#xff1a;既然要求从上到下#xff0c;从左到右#xff0c;则利用队列存放各子树结点的指针是个好办法。 这是一个循环算法#xff0c;用while语句不断循环#xff0c;直到队空之后自然退出该函数。 技巧之处#xff1a;当根结点入队后#xff0c;会…解思路既然要求从上到下从左到右则利用队列存放各子树结点的指针是个好办法。 这是一个循环算法用while语句不断循环直到队空之后自然退出该函数。 技巧之处当根结点入队后会自然使得左、右孩子结点入队而左孩子出队时又会立即使得它的左右孩子结点入队……以此产生了按层次输出的效果。 level(liuyuT) / liuyu *T,*p,q[100]; 假设max已知/ {int f,r; f0; r0; /置空队/ r(r1)%max; q[r]T; /根结点进队/ while(f!r) /队列不空/ {f(f1%max); pq[f]; /出队/ printf(“%d”,p-data); /打印根结点/ if(p-lchild){r(r1)%max; q[r]p-lchild;} /若左子树不空则左子树进队/ if(p-rchild){r(r1)%max; q[r]p-rchild;} /若右子树不空则右子树进队/ } return(0); } 法二 void LayerOrder(Bitree T)//层序遍历二叉树 { InitQueue(Q); //建立工作队列
EnQueue(Q,T); while(!QueueEmpty(Q)) { DeQueue(Q,p); visit§; if(p-lchild) EnQueue(Q,p-lchild); if(p-rchild) EnQueue(Q,p-rchild); } }//LayerOrder
可以用前面的函数建树然后调用这个函数来输出。
完整程序如下已上机通过 #include stdio.h #include stdlib.h #define max 50 typedef struct liuyu{int data;struct liuyu *lchild,*rchild;}test; liuyu *root,*p,*q[max]; int sum0;int msizeof(test);
void insert_data(int x) /如何生成二叉排序树参见教材P43C程序/ { liuyu *p,*q,s; s(test)malloc(m); s-datax; s-lchildNULL; s-rchildNULL;
if(!root){roots; return;} proot; while§ /如何接入二叉排序树的适当位置/ {qp; if(p-datax){printf(“data already exist! \n”);return;} else if(xdata)pp-lchild; else pp-rchild; } if(xdata)q-lchilds; else q-rchilds; }
level(liuyuT) / liuyu *T,*p,q[100]; 假设max已知/ {int f,r; f0; r0; /置空队/ r(r1)%max; q[r]T; /根结点进队/ while(f!r) /队列不空/ {f(f1%max); pq[f]; /出队/ printf(“%d”,p-data); /打印根结点/ if(p-lchild){r(r1)%max; q[r]p-lchild;} /若左子树不空则左子树进队/ if(p-rchild){r(r1)%max; q[r]p-rchild;} /若右子树不空则右子树进队/ } return(0); }
void main() /先生成二叉排序树再调用深度遍历递归函数进行统计并输出/ {int i,x; i1; rootNULL; /千万别忘了赋初值给root!/ do{printf(“please input data%d:”,i); i; scanf(“%d”,x); /从键盘采集数据以-9999表示输入结束/ if(x-9999){ printf(“\nNow output data value:\n”, level(root)); return; } else insert_data(x);} /调用插入数据元素的函数/ while(x!-9999); return;}
已知一棵具有n个结点的完全二叉树被顺序存储于一维数组A中试编写一个算法打印出编号为i的结点的双亲和所有的孩子。 答首先由于是完全二叉树不必担心中途会出现孩子为null的情况。 其次分析结点i的左孩子为2i右孩子为2i1;直接打印即可。 Printf(“Left_child”, %d, v[2i].data; “Right_child”, %d, v[2i1].data;); 但其双亲是i/2需先判断i为奇数还是偶数。若i为奇数则应当先i-- 然后再除以2。 If(i/2!0)i–; Printf(“Parents”, %d, v[i/2].data;);