btree.h

#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

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;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);}
}

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);elseprintf("无左孩子 ");rp=RchildNode(p);if (rp!=NULL)printf("右孩子为%c",rp->data);elseprintf("无右孩子 ");}elseprintf(" 未找到!");printf("\n");printf("  (4)二叉树b的深度:%d\n",BTNodeDepth(b));printf("  (5)释放二叉树b\n");DestroyBTNode(b);return 0;
}

第九周项目实践1 二叉树的链式存储及基本运算 算法库相关推荐

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

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

  2. 二叉树的链式存储结构--二叉链表

    1 二叉树的链式存储结构 //二叉链表的结点结构定义typedef int TElemType; typedef struct BiTNode {TElemType data;struct BiTNo ...

  3. C语言手写二叉树(链式存储结构)

    C语言手写二叉树(链式存储结构) 二叉树结构 二叉树基本运算 代码 图例(main函数执行过程如下:) 阶段I 阶段II 阶段III 阶段IV 阶段V 先序遍历输出过程 二叉树结构 二叉树可以用顺序存 ...

  4. c语言二叉树链式存储,C语言 二叉树的链式存储实例

    二叉树的链式存储 实现二叉树的基本操作:建立.遍历.计算深度.结点数.叶子数等. 输入C,先序创建二叉树,#表示空节点: 输入H:计算二叉树的高度: 输入L:计算二叉树的叶子个数: 输入N:计算二叉树 ...

  5. 二叉树的链式存储结构

    文章目录 前言 正文 总结 前言 上一节讲了二叉树的顺序存储,通过学习你会发现,其实二叉树并不适合用数组存储,因为并不是每个二叉树都是完全二叉树,普通二叉树使用顺序表存储或多或多会存在空间浪费的现象. ...

  6. (数据结构)二叉树的链式存储结构

    二叉树的顺序存储的缺点 因为并不是每个二叉树都是完全二叉树,普通二叉树使用顺序表存储或多或少会存在空间浪费的现象 图 1 普通二叉树的转化 如上图 1,普通二叉树里只有二个元素,最好的存储方式当然是开 ...

  7. 数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序、中序、后序、层次)和线索二叉树

    二叉树每个节点至多只有两棵子树(即二叉树中不存在度大于2的节点),并且二叉树的子树有左右之分,其次序不能任意颠倒. 1. 二叉树 二叉树一般采用链式存储结构,用链表节点来存储二叉树中每个节点.在二叉树 ...

  8. 二叉树的链式存储结构(线索二叉树)

    一.链式存储结构 由于顺序存储二叉树的空间利用率较低,因此二叉树一般都采用链式存储结构,用链表结点来存储二叉树中的每个结点.在二叉树中,结点结构通过包括若干数据域和若干指针域,二叉链表至少包含3个域: ...

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

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

最新文章

  1. HTML5学习笔记简明版(3):新元素之hgroup,header,footer,address,nav
  2. 如何编写一个全新的 Git 协议
  3. iOS控件之UILabel
  4. android黑科技系列——静态分析技术来破解Apk
  5. HashSet、TreeSet、TreeMap实现原理
  6. 阿里云MaxCompute印度开服,加速大数据产业升级
  7. 请允许我用2019年11种主流编程语言,祝祖国70华诞快乐!
  8. 大数据可视化需注意什么问题
  9. 论文精读—XGBoost paper
  10. python基础数据结构,Python基本数据结构
  11. C/C++ 格式化读取和读取一行
  12. 现在流行的少儿编程是不是再收大家的智商税?来看看最中肯的回答
  13. 第三方支付——微信web端支付(java)
  14. 网站运行原理及开发流程
  15. Python OpenCV 读取USB摄像头报错问题解决
  16. 软件工程——(1)软件与软件工程 思维导图
  17. 堆和栈的区别 之 数据结构和内存
  18. 一年共读50本心理学图书是怎样的体验?
  19. 学什么编程语言比较好?
  20. SSL_1597 石子合并问题

热门文章

  1. 9岁印度女孩成为最年轻微软认证专家
  2. 如何解决Bluetooth系统设计的棘手问题
  3. Pat甲级 1002 A+B for Polynomials
  4. python 16进制加法_在python中追加2个十六进制值
  5. react编译报错:Import in body of module; reorder to top import/first
  6. Spark SQL 最简单例子
  7. 开源:Sagit.Framework For IOS 开发框架
  8. winpcap 发送数据包
  9. Redhat Linux通过RPM安装搭建LAMP环境
  10. EasyUI 1.3.6 行号显示不全