问题及代码:

文件名:main.cpp  btree.cpp  btree.h

作者:郑孚嘉

问题描述:定义二叉树的链式存储结构,实现其基本运算,并完成测试。
要求:

1、头文件btree.h中定义数据结构并声明用于完成基本运算的函数。对应基本运算的函数包括:

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); //销毁二叉树

2、在btree.cpp中实现这些函数
3、在main函数中完成测试,包括如下内容:
(1)用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建如图的二叉树用于测试。

(2)输出二叉树
(3)查找值为’H’的节点,若找到,输出值为’H’的节点的左、右孩子的值
(4)求高度二叉树高度
(5)销毁二叉树

代码:
头文件:btree.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明

#ifndef BTREE_H_INCLUDED
#define BTREE_H_INCLUDED
#endif // 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);  //销毁二叉树

源文件:btree.cpp,包含实现各种算法的函数的定义

#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;
else
return 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);                          //空树的高度为0
else
{
lchilddep=BTNodeDepth(b->lchild);   //求左子树的高度为lchilddep
rchilddep=BTNodeDepth(b->rchild);   //求右子树的高度为rchilddep
return (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);
}
}

main.cpp 完成相关测试

#include <stdio.h>
#include "btree.h"
int main()
{
BTNode *b,*p,*lp,*rp;;
printf("  (1)创建二叉树:");
CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
printf("\n");
printf("  (2)输出二叉树:");
DispBTNode(b);
printf("\n");
printf("  (3)查找H节点:");
p=FindNode(b,'H');
if (p!=NULL)
{
lp=LchildNode(p);
if (lp!=NULL)
printf("左孩子为%c ",lp->data);
else
printf("无左孩子 ");
rp=RchildNode(p);
if (rp!=NULL)
printf("右孩子为%c",rp->data);
else
printf("无右孩子 ");
}
else
printf(" 未找到!");
printf("\n");
printf("  (4)二叉树b的深度:%d\n",BTNodeDepth(b));
printf("  (5)释放二叉树b\n");
DestroyBTNode(b);
return 0;
}

运行结果:

知识点总结:

CreateBTNode这个函数运用了一个顺序栈结构储存二叉树,最后当栈为空时创建成功。FindNode和BTNodeDepth运用了递归算法实现了查找和求深度的算法。

第10周项目1 二叉树算法库相关推荐

  1. 数据结构上机实践第九周项目1 - 二叉树算法库

    二叉树算法库 学了新的内容就应该有新的应用,本次实践将进行二叉树算法库的建立,来适应更多工程的需求,丰富算法库. 注:在main函数中,创建的用于测试的二叉树如下 首先本次建立算法库实践将会运用到多文 ...

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

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

  3. 数据结构上机实践第九周项目2 - 二叉树遍历的递归算法

    二叉树遍历的递归算法 递归问题总会成为我们的难点,代码量少,思维量确是很大,难是在所难免的,所以,在思维理解的同时结合实现代码理解,这样就很有可能让我们打开思路,理解的更深,本次实践将在二叉树算法的基 ...

  4. 第四周实践项目4 建立算法库——双链表

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目4-数据结构之自建算法库--双链表 *作 者:邵雪源 *完成日期 ...

  5. 第五周项目-建立顺序栈算法库

    建设自己的专业基础设施算法库. 顺序栈算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:sqstack.h,包含定义顺序栈数据结构的代码.宏定义.要实现算法的函数的声明: [csharp]  ...

  6. 数据结构上机实践第五周项目1- 建立顺序栈算法库

    建立顺序栈算法库 本次实践将建立顺序栈的算法库,用以解决更多的工程问题,提供便利.(编译环境:VC++6.0) 建立算法库将会用到多文件组织工程的建立,本次实践不再细说,点击此处可参考. 建立好的工程 ...

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

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

  8. 数据结构上机实践第14周项目2 - 二叉树排序树中查找的路径

    二叉树排序树中查找的路径 项目要求如下: 设计一个算法,输出在二叉排序中查找时查找某个关键字经过的路径.  专为本项目设计的算法体现在函数int SearchBST(-)和void SearchRes ...

  9. 第十五周 项目三 归并排序算法的改进

    /* * Copyright (c)2017,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:项目3.cpp * 作 者:孙仁圆 * 完成日期:2017年12 ...

  10. C++第10周项目4参考——完数

    课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目4:输出完数](课本p86第20题)一个数如果恰好等于它的因子之和, ...

最新文章

  1. php进入目录,php文件,文件夹(目录)操作函数总结
  2. 至暗时刻鸿蒙初开,鸿蒙2.0面世,华为在“至暗时刻”迎来曙光
  3. Security 登录认证流程详细分析 源码与图相结合
  4. MQTT 轻量版实例发布,满足更多移动互联场景
  5. Leetcode 77.组合
  6. 為什麼system32中放的是64位dll,syswow64中放的是32位dll
  7. HDU题目分类啊!!!
  8. 开放下载!基于PAI个性化推荐系统开发指南
  9. 1主5从mysql数据库_MySQL主从复制虽好,能完美解决数据库单点问题吗?
  10. CreateThread线程函数
  11. 【Mac】Mac 下安装MySQL优化工具mysqltuner执行报错 [!!] Attempted to use login credentials
  12. 在线BMI身体质量指数计算器
  13. 昔年浅谈电商服务业务应如何推广
  14. 使用mongoose-paginate-v2查询缓慢问题
  15. c语言程序100例pdf,经典c程序100例源代码(全).pdf
  16. 多语言国家与缩写映射表
  17. 服务器2008系统提权工具,Windows下提权辅助工具Windows-Exploit-Suggester
  18. 获取股票交易数据的Tushare的使用方法
  19. win10硬盘锁怎么解除_win10系统如何解锁bitlocker的硬盘加密
  20. 无法连接虚拟设备 sata0:1,因为主机上没有相对应的设备——解决方案

热门文章

  1. Vulkan系列教程—VMA教程(七)—Defragmentation(碎片整理)
  2. 【资源】同济线性代数教材(第五版)
  3. arduino声音传感器与二极管_Arduino声音传感器
  4. vs2015运行编译器遇到堆空间不足问题
  5. 【转载】双重身份:2017JCR既是SCI又是SSCI的期刊名单
  6. python办公软件教程书籍_针对office办公软件初学者有什么推荐书籍?
  7. linux 报警级别,linux PMBus总线驱动设计分析
  8. 5.1 凸二次规划问题
  9. SQLmap下载和安装教程(详细附图)
  10. 2022短视频去水印小程序带流量主/CPS/资源/工具/批量解析/修改MD5