C++ 二叉树实现及四种遍历算法(Basic Realization of the BinaryTree Template class)
Basic Realization of the BinaryTree
环境: Codeblocks
实现二叉树展示:
头文件 main.cpp
//Written by Xuebi
//本程序先构建模板类简单二叉树,并实现先序,中序,后序,层序历遍。
#include <iostream>
#include "Tree.h"
using namespace std;
int main()
{TreeNode<char> Plus('+');TreeNode<char> moins('-');TreeNode<char> fois('*');TreeNode<char> divise('/');TreeNode<char> E('E');TreeNode<char> D('D');TreeNode<char> C('C');TreeNode<char> B('B');TreeNode<char> A('A');BinaryTree<char> BT(&Plus);Plus.Leftchild=&moins;Plus.Rightchild=&E;moins.Leftchild=&fois;moins.Rightchild=&D;fois.Leftchild=&divise;fois.Rightchild=&C;divise.Leftchild=&A;divise.Rightchild=&B;cout<<"Firstly, show the Preorder: ";BT.PreOrder();cout<<endl;cout<<"Secondly, show the Inorder: ";BT.InOrder();cout<<endl;cout<<"Thirdly, show the Postorder: ";BT.PostOrder();cout<<endl;cout<<"Fourthly, show the Levelorder: ";BT.LevelOrder();cout<<endl;
}
头文件 Tree.h
#ifndef _TREE_H_
#define _TREE_H_
#include <queue>
template<class T>
class BinaryTree;
template <class T>
class TreeNode
{
friend BinaryTree<T>;//友元函数啊!!!!记得带<T>
public:TreeNode(T element):Data(element),Leftchild(0),Rightchild(0){};TreeNode<T>*Leftchild;TreeNode<T>*Rightchild;T Data;
};
template <class T>
class BinaryTree
{
private:TreeNode<T>*Head;
public:BinaryTree(TreeNode<T>*element):Head(element){};T Visit(TreeNode<T>*current);void PreOrder();void PreOrder(TreeNode<T>*current);void InOrder();void InOrder(TreeNode<T>*current);void PostOrder();void PostOrder(TreeNode<T>*current);void LevelOrder();
};
template <class T>
T BinaryTree<T>::Visit(TreeNode<T>*current)
{return current->Data;
}
template <class T>
void BinaryTree<T>::InOrder()
{InOrder(Head);
}
template <class T>
void BinaryTree<T>::InOrder(TreeNode<T>*current)
{if(current){InOrder(current->Leftchild);std::cout<<Visit(current)<<" ";InOrder(current->Rightchild);}
}
template <class T>
void BinaryTree<T>::PreOrder()
{PreOrder(Head);
}
template <class T>
void BinaryTree<T>::PreOrder(TreeNode<T>*current)
{if(current){std::cout<<Visit(current)<<" ";PreOrder(current->Leftchild);PreOrder(current->Rightchild);}
}
template <class T>
void BinaryTree<T>::PostOrder()
{PostOrder(Head);
}
template <class T>
void BinaryTree<T>::PostOrder(TreeNode<T>*current)
{if(current){PostOrder(current->Leftchild);PostOrder(current->Rightchild);std::cout<<Visit(current)<<" ";}
}
template <class T>
void BinaryTree<T>::LevelOrder()
{std::queue<TreeNode<T>*> p;TreeNode<T>*current=Head;while(current){std::cout<<Visit(current)<<" ";if(current->Leftchild)p.push(current->Leftchild);if(current->Rightchild)p.push(current->Rightchild);if(p.empty())return;current=p.front();p.pop();}
}
#define _TREE_H_
#endif // _TREE_H_
C++ 二叉树实现及四种遍历算法(Basic Realization of the BinaryTree Template class)相关推荐
- 【树的四种遍历方法(遍历排序二叉树)】
文章目录 一.建立一个排序二叉树 二.四种遍历 前言 这里先给出建立一颗普通的排序二叉树,平衡二叉树的建立以及操作,等复习到再写吧. 一.排序二叉树 排序二叉树,即当前节点左子树 < 当前节点 ...
- 树和二叉树(四种遍历,建树)详解+二叉排序树(包含图像和相关习题)
目录 树和二叉树 一.树 2.有序树和无序树 3.森林 4.树的基本性质 二.二叉树的概念 (1)二叉树的编号 1.二叉树和度为2的有序树的区别: 2.满二叉树 3.完全二叉树: 4.平衡二叉树: 5 ...
- 常用数据结构之二叉树及树的四种遍历方式
1.树 我们选择一种数据结构,不仅要能存储数据,而且要能体现数据之间的关系.目前数据主要有是三种关系一对一.一对多.多对多:之前我们讨论了线性表(数组.链表.栈.队列),其中的元素具有一对一的关系,通 ...
- 二叉树的四种遍历方式
二叉树的四种遍历方式: 二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点被访问依次且仅被访问一次. 四种遍历方式分别为 ...
- 二叉树的存储结构及四种遍历(C语言)
二叉树的存储结构: typedef struct TNode *Position; typedef Position BinTree; /* 二叉树类型 */ struct TNode{ /* 树结点 ...
- 面试前你需要掌握的二叉树、二叉排序树的创建和四种遍历方式
文章目录 二叉树的创建 二叉排序树的创建 树的先序.中序.后续遍历 树的层次遍历 二叉树的创建 普通二叉树的创建,这里以完全二叉树的创建为例,所谓完全二叉树,也就是从根节点开始,一层一层的往后接入节点 ...
- 二叉树的四种遍历方法(前序遍历、中序遍历、后序遍历、层序遍历)有图有真相!!!
文章目录 二叉树的四种遍历方式 前序遍历(Preorder Traversal) 中序遍历(Inorder Traversal) 后序遍历(Postorder Traversal) 层序遍历(Leve ...
- 树的四种遍历案例和AVL树的旋转的四种情况
树与二叉树 一, 树的基本术语 树中一个结点的子结点个数称为该结点的度, 树中结点的最大度数称为树的度.如结点B的度为2,结点D的度为3,树的度为3. 度大于0的结点称为分支结点(又称非终端结点),度 ...
- java从1到9构建完全二叉树_Java完全二叉树的创建与四种遍历方法分析
Java完全二叉树的创建与四种遍历方法分析 发布时间:2020-10-01 11:58:56 来源:脚本之家 阅读:87 作者:泡0沫 本文实例讲述了Java完全二叉树的创建与四种遍历方法.分享给大家 ...
最新文章
- scratch跳一跳游戏脚本_跳一跳游戏:经典跳一跳2微信小游戏,点开既玩
- Bzoj 2064 分裂 题解
- Error: no such column
- java 循环map 优雅写法_Java for循环Map集合优化实现解析
- linux webshell 页面管理,instantbox:30s内快速搭建可通过webshell管理的Linux系统
- 安岳天气预报软件测试,安岳天气预报15天
- python django做网页论文_Python Web程序-Django框架搭建网站的简单介绍
- Spring Boot---Web应用返回jsp页面
- Linux-Discuz安装LAMP
- 传智播客 C/C++学习笔记 指针3 理解指针必须与内存四区相结合
- 在固态硬盘上安装linux系统怎么安装,教程|教你一键重装怎么将系统安装在固态硬盘上...
- ad15的stc元件库_STC8系列 STC15系列STCMCU Protel_Altium原理图PCB器件封装库文件
- r语言和python爬虫谁厉害_r语言和python有必要都学吗
- 怎么把cad的图导入ps_CAD图如何导入Photoshop的方法
- 一键激活windows系统与office(绿色无捆绑装机员激活工具)
- 在线直播源码评论弹幕是如何“练”成的?
- 使用python爬取抖音app视频(appium可以操控手机)
- python标准库os.path中用来_Python标准库os.path中用来判断指定文件是否存在的方法是_____________。...
- 【工具安装】Quartus II 安装与驱动
- 怎样把其他格式的音频文件转换成MP3格式的
热门文章
- 计算机网络中重要的网络软件是,计算机网络软件的功能及应用分析
- D2:Cake Baking(烤蛋糕)
- CCFI’m stuck!
- C语言优先级 运算符
- 困扰许久的Kafka Rebalance问题
- 开一个传奇该如何操作-开一个传奇必须掌握哪些知识要点
- 报错InvalidArgumentError (see above for traceback): Restoring from checkpoint failed
- docker搭建upsource代码审查工具,通过gitlab检出项目
- 医疗html响应式模板,响应式医疗HTML5模板
- chainer-图像分类-VGG【附源码】