正在加载图片...
lease input datal please input data5 lease input dat please input data9: pleas t data10 9999 Now output depth value= 4 3.【严题集6.47④】编写按层次顺序(同一层自左至右)遍历二叉树的算法 或:按层次输出二叉树中所有结点 解:思路:既然要求从上到下,从左到右,则利用队列存放各子树结点的指针是个好办法 这是一个循环算法,用 while语句不断循环,直到队空之后自然退出该函数。 技巧之处:当根结点入队后,会自然使得左、右孩子结点入队,而左孩子出队时又会立即使得它的左右孩 子结点入队,……以此产生了按层次输出的效果 level(liuyu"T) /* liuyu*T*p,*q[1001,假设max已知* f int f, r f=0,r=0 /置空队* r-r +1)%max qIr=T; /根结点进队* while(fl=r) /*队列不空* if=(f+1%max) p=qIf]: 出队* printf("%d",p->data /*打印根结点* iftp->lhid){r=(r+1)%max;qr=p> lchild;}/若左子树不空,则左子树进队* if(p->rchild)(r=(r+1 )%max; qIrFp->rchild; i 若右子树不空,则右子树进队 eturn(O) 法二: void Layer Order( Bitree T∥层序遍历二叉树 InitQueue(Q),∥建立工作队列 EnQueue(Q, T while(!QueueEmpty(Q)) DeQueue( Q p) f(p->lchild) EnQueue(Q, p->lchild) if(p->rchild) EnQueue(Q, p->rchild10 3. 【严题集 6.47④】编写按层次顺序(同一层自左至右)遍历二叉树的算法。 或:按层次输出二叉树中所有结点; 解:思路:既然要求从上到下,从左到右,则利用队列存放各子树结点的指针是个好办法。 这是一个循环算法,用 while 语句不断循环,直到队空之后自然退出该函数。 技巧之处:当根结点入队后,会自然使得左、右孩子结点入队,而左孩子出队时又会立即使得它的左右孩 子结点入队,……以此产生了按层次输出的效果。 level(liuyu*T) /* liuyu *T,*p,*q[100]; 假设 max 已知*/ {int f,r; f=0; r=0; /*置空队*/ r=(r+1)%max; q[r]=T; /*根结点进队*/ while(f!=r) /*队列不空*/ {f=(f+1%max); p=q[f]; /*出队*/ printf("%d",p->data); /*打印根结点*/ if(p->lchild){r=(r+1)%max; q[r]=p->lchild;} /*若左子树不空,则左子树进队*/ if(p->rchild){r=(r+1)%max; q[r]=p->rchild;} /*若右子树不空,则右子树进队*/ } return(0); } 法二: void LayerOrder(Bitree T)//层序遍历二叉树 { InitQueue(Q); //建立工作队列 EnQueue(Q,T); while(!QueueEmpty(Q)) { DeQueue(Q,p); visit(p); if(p->lchild) EnQueue(Q,p->lchild); if(p->rchild) EnQueue(Q,p->rchild); }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有