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)相关推荐

  1. 【树的四种遍历方法(遍历排序二叉树)】

    文章目录 一.建立一个排序二叉树 二.四种遍历 前言 这里先给出建立一颗普通的排序二叉树,平衡二叉树的建立以及操作,等复习到再写吧. 一.排序二叉树 排序二叉树,即当前节点左子树 < 当前节点 ...

  2. 树和二叉树(四种遍历,建树)详解+二叉排序树(包含图像和相关习题)

    目录 树和二叉树 一.树 2.有序树和无序树 3.森林 4.树的基本性质 二.二叉树的概念 (1)二叉树的编号 1.二叉树和度为2的有序树的区别: 2.满二叉树 3.完全二叉树: 4.平衡二叉树: 5 ...

  3. 常用数据结构之二叉树及树的四种遍历方式

    1.树 我们选择一种数据结构,不仅要能存储数据,而且要能体现数据之间的关系.目前数据主要有是三种关系一对一.一对多.多对多:之前我们讨论了线性表(数组.链表.栈.队列),其中的元素具有一对一的关系,通 ...

  4. 二叉树的四种遍历方式

    二叉树的四种遍历方式: 二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点被访问依次且仅被访问一次. 四种遍历方式分别为 ...

  5. 二叉树的存储结构及四种遍历(C语言)

    二叉树的存储结构: typedef struct TNode *Position; typedef Position BinTree; /* 二叉树类型 */ struct TNode{ /* 树结点 ...

  6. 面试前你需要掌握的二叉树、二叉排序树的创建和四种遍历方式

    文章目录 二叉树的创建 二叉排序树的创建 树的先序.中序.后续遍历 树的层次遍历 二叉树的创建 普通二叉树的创建,这里以完全二叉树的创建为例,所谓完全二叉树,也就是从根节点开始,一层一层的往后接入节点 ...

  7. 二叉树的四种遍历方法(前序遍历、中序遍历、后序遍历、层序遍历)有图有真相!!!

    文章目录 二叉树的四种遍历方式 前序遍历(Preorder Traversal) 中序遍历(Inorder Traversal) 后序遍历(Postorder Traversal) 层序遍历(Leve ...

  8. 树的四种遍历案例和AVL树的旋转的四种情况

    树与二叉树 一, 树的基本术语 树中一个结点的子结点个数称为该结点的度, 树中结点的最大度数称为树的度.如结点B的度为2,结点D的度为3,树的度为3. 度大于0的结点称为分支结点(又称非终端结点),度 ...

  9. java从1到9构建完全二叉树_Java完全二叉树的创建与四种遍历方法分析

    Java完全二叉树的创建与四种遍历方法分析 发布时间:2020-10-01 11:58:56 来源:脚本之家 阅读:87 作者:泡0沫 本文实例讲述了Java完全二叉树的创建与四种遍历方法.分享给大家 ...

最新文章

  1. scratch跳一跳游戏脚本_跳一跳游戏:经典跳一跳2微信小游戏,点开既玩
  2. Bzoj 2064 分裂 题解
  3. Error: no such column
  4. java 循环map 优雅写法_Java for循环Map集合优化实现解析
  5. linux webshell 页面管理,instantbox:30s内快速搭建可通过webshell管理的Linux系统
  6. 安岳天气预报软件测试,安岳天气预报15天
  7. python django做网页论文_Python Web程序-Django框架搭建网站的简单介绍
  8. Spring Boot---Web应用返回jsp页面
  9. Linux-Discuz安装LAMP
  10. 传智播客 C/C++学习笔记 指针3 理解指针必须与内存四区相结合
  11. 在固态硬盘上安装linux系统怎么安装,教程|教你一键重装怎么将系统安装在固态硬盘上...
  12. ad15的stc元件库_STC8系列 STC15系列STCMCU Protel_Altium原理图PCB器件封装库文件
  13. r语言和python爬虫谁厉害_r语言和python有必要都学吗
  14. 怎么把cad的图导入ps_CAD图如何导入Photoshop的方法
  15. 一键激活windows系统与office(绿色无捆绑装机员激活工具)
  16. 在线直播源码评论弹幕是如何“练”成的?
  17. 使用python爬取抖音app视频(appium可以操控手机)
  18. python标准库os.path中用来_Python标准库os.path中用来判断指定文件是否存在的方法是_____________。...
  19. 【工具安装】Quartus II 安装与驱动
  20. 怎样把其他格式的音频文件转换成MP3格式的

热门文章

  1. 计算机网络中重要的网络软件是,计算机网络软件的功能及应用分析
  2. D2:Cake Baking(烤蛋糕)
  3. CCFI’m stuck!
  4. C语言优先级 运算符
  5. 困扰许久的Kafka Rebalance问题
  6. 开一个传奇该如何操作-开一个传奇必须掌握哪些知识要点
  7. 报错InvalidArgumentError (see above for traceback): Restoring from checkpoint failed
  8. docker搭建upsource代码审查工具,通过gitlab检出项目
  9. 医疗html响应式模板,响应式医疗HTML5模板
  10. chainer-图像分类-VGG【附源码】