#ifndef BTREE_H_INCLUDED
#define BTREE_H_INCLUDED
#define MaxSize 100
typedef char ElemType;
typedef struct node
{ElemType data;              //数据元素struct node *lchild;        //指向左孩子struct node *rchild;        //指向右孩子
} BTNode;
void CreateBTNode(BTNode *&b,char *str);        //由str串创建二叉链
//BTNode *FindNode(BTNode *b,ElemType x);     //返回data域为x的节点指针
//BTNode *LchildNode(BTNode *p);  //返回*p节点的左孩子节点指针
//BTNode *RchildNode(BTNode *p);  //返回*p节点的右孩子节点指针
//int BTNodeDepth(BTNode *b); //求二叉树b的深度
void DispBTNode(BTNode *b); //以括号表示法输出二叉树
void DestroyBTNode(BTNode *&b);  //销毁二叉树
#endif // BTREE_H_INCLUDED
#include <stdio.h>
#include <malloc.h>
#include "btree.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];}
}
/*BTNode *FindNode(BTNode *b,ElemType x)  //返回data域为x的节点指针
{BTNode *p;if (b==NULL)return NULL;else if (b->data==x)return b;else{p=FindNode(b->lchild,x);if (p!=NULL)return p;elsereturn FindNode(b->rchild,x);}
}
BTNode *LchildNode(BTNode *p)   //返回*p节点的左孩子节点指针
{return p->lchild;
}
BTNode *RchildNode(BTNode *p)   //返回*p节点的右孩子节点指针
{return p->rchild;
}
int BTNodeDepth(BTNode *b)  //求二叉树b的深度
{int lchilddep,rchilddep;if (b==NULL)return(0);                          //空树的高度为0else{lchilddep=BTNodeDepth(b->lchild);   //求左子树的高度为lchilddeprchilddep=BTNodeDepth(b->rchild);   //求右子树的高度为rchilddepreturn (lchilddep>rchilddep)? (lchilddep+1):(rchilddep+1);}
}*/
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 DestroyBTNode(BTNode *&b)   //销毁二叉树
{if (b!=NULL){DestroyBTNode(b->lchild);DestroyBTNode(b->rchild);free(b);}
}
#include <stdio.h>
#include "btree.h"
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;}}
}
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;
}


												

第十周项目实践1 二叉树算法验证相关推荐

  1. 数据结构上机实践第十周项目2 - 用二叉树求解代数表达式

    用二叉树求解代数表达式 本次实践所用到的二叉树算法库点击此处参考 编译环境(VC++6.0) 项目要求如下: 用二叉树来表示代数表达式,树的每一个分支节点代表一个运算符,每一个叶子节点代表一个运算数( ...

  2. 第九周项目实践1 二叉树的链式存储及基本运算 算法库

    btree.h #ifndef BTREE_H_INCLUDED #define BTREE_H_INCLUDED#define MaxSize 100 typedef char ElemType; ...

  3. 第10周项目实践 线索二叉树的建立及遍历

    typedef struct node {     Elemtype date;     int ltag,rtag;     struct node lchild;     struct node ...

  4. 第九周项目实践2 二叉树遍历的递归算法

    #ifndef BTREE_H_INCLUDED #define BTREE_H_INCLUDED#define MaxSize 100 typedef char ElemType; typedef ...

  5. 第八周项目实践6 KMP算法(串的模式匹配)

    sqString.h #ifndef SqString_H_INCLUDED #define SqString_H_INCLUDED#define MaxSize 100 //最多的字符个数 type ...

  6. 第十周项目实践 哈夫曼树的建立哈夫曼编码

    typedef struct {char date;int lchild,rchild;int parent; }HTnode; void CreateHTnode(HTnode ht[],int n ...

  7. 第7周项目实践 1 队列算法库的建立

    sqqueue.cpp#include <stdio.h> #include <malloc.h> #include "sqqueue.h" void In ...

  8. 数据结构上机实践第10周项目1 - 二叉树算法验证

    二叉树算法验证 本次实践主要是对于二叉树算法的验证,达成对于算法熟练掌握的目的. 实践所用的二叉树算法库点击此处可以参考(编译环境:VC++6.0) 一.层次遍历算法验证 验证具体要求如下: 实现二叉 ...

  9. 数据结构上机实践第九周项目3 - 利用二叉树遍历思想解决问题

    利用二叉树遍历思想解决问题 学以致用,知行合一,学了知识就要会运用,否则跟背课文没什么区别,上次实践,做了二叉树递归遍历的算法实现,本次实践,将利用遍历思想解决问题,将遍历思想真正的运用到实际问题需求 ...

最新文章

  1. WMI技术介绍和应用——查询时间信息
  2. Swift里计数相关的小细节
  3. 容器编排技术 -- Kubernetes 给容器和Pod分配CPU资源
  4. python timer 死掉_Python定时事件 Timer sched
  5. 逐行读文件_用python比较两个文件的内容是否相同
  6. hwpfdocument 获取第一页内容_有人专注搞这3个引流渠道,精准流量获取从此变得简单...
  7. android之Handler详解
  8. 华硕点亮系统无法连接到服务器,华硕点亮点亮后台管理系统
  9. Linux快捷键详解
  10. C语言图形库——EasyX基本贴图
  11. paypal支付对接(付款方式:即时付款、快速付款):PC端支付、APP端支付,异步回调IPN
  12. wamp的Laravel项目的Apache虚拟主机域名绑定和端口修改(实用)
  13. (单例多例,枚举,动态代理,lombok)day23javaSE基础查漏补缺
  14. java partial class_easymock教程-partial class mocking
  15. 1644年,紫禁城换了三任主人
  16. 职高学计算机考大学容易吗,男生读职高什么专业好 能不能考大学
  17. 文科生也能看懂,什么是熵
  18. 看完 穿条纹睡衣的男孩 之后
  19. 多线程经典问题-----乘客做公交车问题解答3
  20. 关于墨客的abi decode/encode

热门文章

  1. QCopChannel的用法
  2. SharePoint 如何检查一个SPWeb是否存在
  3. FILE操作:删除与需要拷贝文件同名的文件
  4. 推荐.NET CF控件(Resco MobileForms Toolkit)
  5. Android7.0 Rild工作流程
  6. FFmpeg 源码学习(一):avformat_open_input 源码分析
  7. Android 架构 -- Room
  8. 前端进阶之路:初涉Less
  9. SLAVE为什么一直不动了
  10. Android的一个关于Activity和UI的小程序