二叉树(链表)的相关操作
(1)初始化二叉链表;
(2)前序遍历二叉链表(递归实现);
(3)中序遍历二叉链表(递归实现);
(4)后序遍历二叉链表(递归实现);
(5)层序遍历二叉链表(队列实现);
(6)销毁二叉链表(递归实现)。
(7)复制二叉树
(8)求二叉树的深度
(9)求二叉树的结点数
参考书籍《数据结构》C语言版第2版 人民邮电出版社
前序输入二叉树:
#include <iostream>
#include<queue>
using namespace std;typedef char TElemType;//二叉树的二叉链表储存表示
typedef struct BiTNode
{TElemType data;struct BiTNode *lchild, *rchild;//左右孩子指针}BiTNode, *BiTree;//(1)初始化二叉链表:理解扩展二叉树及其前序遍历序列;
void CreatBitree(BiTree &T)
{TElemType ch;cin >> ch;//getchar();if (ch == '#') T = NULL; //递归结束创建空树else//创建二叉链表{T = new BiTNode;//根结点T->data = ch;CreatBitree(T->lchild);//递归创建左子树CreatBitree(T->rchild);}}//(2)前序遍历二叉链表(递归实现);
void PreOrderTraverse(BiTree T)
{if (T){cout << T->data;//访问根结点PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);}
}//(3)中序遍历二叉链表(递归实现);
void InOrderTraverse(BiTree T)
{if (T){InOrderTraverse(T->lchild);//中序遍历左子树cout << T->data;//访问根结点InOrderTraverse(T->rchild);//中序遍历右子树}
}//(4)后序遍历二叉链表(递归实现);
void PostOrderTraverse(BiTree T)
{if (T){PostOrderTraverse(T->lchild);PostOrderTraverse(T->rchild);cout << T->data;//访问根结点}
}//(5)层序遍历二叉链表;
void LevelOrderTraverse(BiTNode* T)
{queue<BiTNode*>q;q.push(T);while (!q.empty()){cout << q.front()->data;if (q.front()->lchild != NULL)q.push(q.front()->lchild);if (q.front()->rchild != NULL)q.push(q.front()->rchild);q.pop();}
}//(6)销毁二叉链表(递归实现)。
void DestroyTree(BiTree T)
{if (T == NULL) return;DestroyTree(T->lchild);DestroyTree(T->rchild);delete T;
}//复制二叉树
void Copy(BiTree T, BiTree &NewT)
{if (T == NULL){NewT = NULL;return;}else{NewT = new BiTNode[9];NewT->data = T->data;Copy(T->lchild, NewT->lchild);Copy(T->rchild, NewT->rchild);}}//二叉树的深度
int Depth(BiTree T)
{int m, n;if (T == NULL) return 0;else{m = Depth(T->lchild);n = Depth(T->rchild);if (m > n) return(m + 1);else return(n + 1);}
}//二叉树的结点数
int NodeCount(BiTree T)
{if (T == NULL) return 0;else return NodeCount(T->lchild) + NodeCount(T->rchild) + 1;
}void main()
{BiTree T;cout << "创建二叉树: "<<endl;CreatBitree(T);cout << endl;cout << "先序遍历: ";PreOrderTraverse(T);cout << endl;cout << "中序遍历: ";InOrderTraverse(T);cout << endl;cout << "后序遍历: ";PostOrderTraverse(T);cout << endl;cout << "层序遍历: ";LevelOrderTraverse(T);cout << endl;cout << "创建树的深度为:" << Depth(T) << endl;cout << "创建树的总结点个数为:" << NodeCount(T) << endl;DestroyTree(T);system("pause");
}
二叉树(链表)的相关操作相关推荐
- 双链表的相关操作(定义,后插,删除,遍历)
双链表的相关操作 双链表的定义 双链表的插入(后插) 双链表的删除 销毁双链表 双链表的遍历 后向遍历 前向遍历 跳过头结点 主函数 双链表的定义 typedef struct DNode {Elem ...
- 数据结构(单链表的相关操作)
为什么80%的码农都做不了架构师?>>> #include <stdio.h> #include <stdlib.h> #define ElemType ...
- 关于链表的相关操作与问题
这篇博文仅记录有关链表的操作,供回忆与参考. 1.概述 链表在我看来是储存数据的工具,原理上讲表上每一个节点有两个属性,也可以说是格子,第一个存放数据,第二个存放下一个节点地址.最后一个节点只存放数据 ...
- 链表的相关操作-数据结构与算法(北航991数据结构)
数据结构与算法(北航991数据结构) 下面的这一段代码是针对于这30道题而写的关于单向链表,双向链表以及循环链表等链表的创建及遍历,做辅助使用. 所有题目均是自己理解敲的,并执行成功的.可能会存在一起 ...
- (C++版)链表(一)——实现单向链表创建、插入、删除等相关操作
http://blog.csdn.net/fisherwan/article/details/25557545 前段时间用C语言实现了链表的相关操作,但是发现当时挺清楚的,过了一段时间又忘的差不多了, ...
- 【数据结构】二叉树及其相关操作
二叉树的定义 二叉树是一个由结点构成的有限集合,这个集合或者为空,或者由一个根节点及两棵互不相交的分别称作这个根节点的左子树和右子树的二叉树组成. 二叉树并非一般的树形结构的特殊形式,它们是两种不同的 ...
- 二叉树的相关操作(c语言)
二叉树的相关操作:包括先序序列+中序序列建树丶后序序列+中序序列建树丶层次序列+中序序列建树:先序遍历丶中序遍历丶后序遍历丶层次遍历:二叉树的深度及最大宽度:度分别为0,1,2的节点个数以及总结点个数 ...
- C语言 二叉树的相关操作
C语言 二叉树的相关操作 // 头文件 #ifndef __BITREE_H__ #define __BITREE_H__ #define _CRT_SECURE_NO_WARNINGS #inclu ...
- 数据结构C++边学边做--二叉树的实现(二叉链表实现遍历操作)
二叉树的实现(二叉链表实现遍历操作) 一.二叉树的遍历 二.二叉链表的数据结构定义 三.二叉链表类实现 1.类声明 2.BiTree->构造函数:Create创建二叉链表 3.~BiTree-& ...
- (C语言)链表的实现集合的相关操作
原文链接:https://blog.csdn.net/kobe_jr/article/details/80543611 集合的特征:确定性/ 互异性/ 无序性. 常见的操作:1.查找集合中是否包含这个 ...
最新文章
- 第一次软件工程作业(改进版)
- Netflix的高可用架构建议
- 全世界最详细的图形化VMware中linux环境下oracle安装(三)【weber出品必属精品】...
- 返回Json数据浏览器带上<pre></pre>标签解决方法
- vsftp 在pasv下的防火墙配置
- 【PC工具】复制翻译神器!有了这个开源免费的翻译软件,阅读英文文档变得再也不困难了...
- Helm 从入门到实践 | 从 0 开始制作一个 Helm Charts
- 十一、Struts2封装请求参数的方式
- Spring Boot文件上传
- 触屏网站如何实现返回并刷新
- ChatForFun 公众号使用说明
- switch字符串jdk_应用新的JDK 11字符串方法
- Flask cookie API(response.set_cookie,request.cookies)
- CUDA——Windows上CUDA的安装教程
- STL基本操作及其运用
- matlab单回路控制系统设计,实验二单回路控制系统的建模与仿真 .doc
- Linux挂载Linux网络共享文件夹
- 声波的时域和频域Python实现示例
- Oracle公司中文翻译为“甲骨文”的来源是什么?
- c语言两个程序连接,C程序连接两个字符串