第十一周项目1 验证算法(1) 层次遍历算法
来源:互联网 发布:java工作前景怎么样 编辑:程序博客网 时间:2024/06/02 05:56
问题与代码
/* *Copyright (c) 2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:head.h,main.cpp,zdy.cpp *作者:陈梦萍 *完成日期:2015年11月20日 *版本号:v1.0 * *问题描述: 实现二叉树的层次遍历算法,并对用"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))" 创建的二叉树进行测试 *输入描述:无 *程序输出:若干数据 */
//head.h
#include <stdio.h>#include <malloc.h>#define MaxSize 100typedef char ElemType;typedef struct node{ ElemType data; //数据元素 struct node *lchild; //指向左孩子 struct node *rchild; //指向右孩子} BTNode;void CreateBTNode(BTNode *&b,char *str); //由str串创建二叉链void DestroyBTNode(BTNode *&b); //销毁二叉树void DispBTNode(BTNode *b);void LevelOrder(BTNode * b);
//main.cpp
#include"head.h"int main(){ BTNode *b; CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))"); printf("二叉树b: "); DispBTNode(b); printf("\n"); printf("层次遍历序列:\n"); LevelOrder(b); DestroyBTNode(b); return 0;}
//zdy.cpp
#include "head.h"void CreateBTNode(BTNode *&b,char *str) //由str串创建二叉链{ BTNode *St[MaxSize],*p=NULL; int top=-1,k,j=0; char ch; b=NULL; //建立的二叉树初始时为空 ch=str[j]; while (ch!='\0') //str未扫描完时循环 { switch(ch) { case '(': top++; St[top]=p; k=1; break; //为左节点 case ')': top--; break; case ',': k=2; break; //为右节点 default: p=(BTNode *)malloc(sizeof(BTNode)); p->data=ch; p->lchild=p->rchild=NULL; if (b==NULL) //p指向二叉树的根节点 b=p; else //已建立二叉树根节点 { switch(k) { case 1: St[top]->lchild=p; break; case 2: St[top]->rchild=p; break; } } } j++; ch=str[j]; }}void DestroyBTNode(BTNode *&b) //销毁二叉树{ if (b!=NULL) { DestroyBTNode(b->lchild); DestroyBTNode(b->rchild); free(b); }}void DispBTNode(BTNode *b) //以括号表示法输出二叉树{ if (b!=NULL) { printf("%c",b->data); if (b->lchild!=NULL || b->rchild!=NULL) { printf("("); DispBTNode(b->lchild); if (b->rchild!=NULL) printf(","); DispBTNode(b->rchild); printf(")"); } }}void LevelOrder(BTNode * b){ BTNode * p; BTNode * qu[MaxSize]; int front,rear; //定义队头和队尾的指针 front=rear=-1; //置队列为空队列 rear++; qu[rear]=b; //根节点指针进入队列 while(front!=rear) //队列不为空 { front=(front+1)%MaxSize; p=qu[front]; //队头出队列 printf("%c",p->data); //访问节点 if(p->lchild!=NULL) //有左孩子时将其进队 { rear=(rear+1)%MaxSize; qu[rear]=p->lchild; } if(p->rchild!=NULL) //有右孩子时将其进队 { rear=(rear+1)%MaxSize; qu[rear]=p->rchild; } }}
运行结果
知识点总结
层次遍历:在对某一层节点访问完后,再按照对它们的访问次序对各个节点的左、右孩子顺序访问的方式。
因为先访问的会先输出,由此可知我们可以利用队列来进行验证。
0 0
- 第十一周项目1(1)层次遍历算法验证
- 第十一周项目1-验证算法(层次遍历)
- 第十一周 项目 1 - 验证算法之层次遍历算法
- 第十一周项目1-1层次遍历算法的验证
- 第十一周项目1层次遍历算法的验证
- 第十一周项目1—验证算法(1)层次遍历算法的验证
- 第十一周项目1验证算法(1)层次遍历算法的验证
- 第十一周实践项目1 - 二叉树算法验证(1)层次遍历算法的验证
- 第十一周实践项目1—验证算法(1)层次遍历算法的验证
- 第十一周项目1-验证算法(1)层次遍历算法的验证
- 第十一周项目1-验证算法(1)层次遍历算法的验证
- 第十一周项目1-验证算法(1)层次遍历算法的验证
- 第十一周--项目1 - 二叉树算法验证(1)层次遍历算法的验证
- 第十一周项目1——二叉树算法验证(1) 层次遍历算法验证
- 第十一周项目1——二叉树算法验证(1) 层次遍历算法验证
- 第十一周项目1-验证算法(1)层次遍历算法的验证
- 第十一周项目1-验证算法(1)-层次遍历算法的验证
- 第十一周项目1——二叉树算法验证(1) 层次遍历算法验证
- 第十一周项目1(4)验证算法 哈夫曼编码的算法验证
- 第六周项目4-数制转换
- 第11周 项目1-验证算法(3)中序线索化二叉树的算法验证
- 第十一周项目1 - 二叉树算法验证(4)
- 第十一周项目1-二叉树算法验证(1)
- 第十一周项目1 验证算法(1) 层次遍历算法
- 第十一周项目1-验证算法(3)中序线索化二叉树的算法验证
- Cloud Design Pattern - Scheduler Agent Supervisor (调度代理主管模式)
- tomcat远程调试
- 第十二周 项目四(1) 利用遍历思想求解图问题
- 发表文章
- 白话空间统计十九:热点分析(中)
- 第十一周项目2 - 用二叉树求解代数表达式
- 第十二周项目1-图基本算法库