很久没有接触二叉树了,写这个当作练手,接下来会比较详细地实现二叉树的各个功能及应用。

/*
* BinaryTree.cpp
* Author: Qiang Xiao
* Time: 2015-07-17
*/ #include<iostream>
#include<string>
using namespace std; template<class ElemType>
class BinaryNode{
public:
ElemType data;
BinaryNode<ElemType>* leftChild;
BinaryNode<ElemType>* rightChild; BinaryNode();
BinaryNode(const ElemType elem, BinaryNode<ElemType>* left = NULL, BinaryNode<ElemType>* right = NULL);
void print() const;
}; template<class ElemType>
void BinaryNode<ElemType>::print() const{
cout << this->data << endl;
} template<class ElemType>
BinaryNode<ElemType>::BinaryNode(){
this->leftChild = NULL;
this->rightChild = NULL;
} template<class ElemType>
BinaryNode<ElemType>::BinaryNode(const ElemType elem, BinaryNode<ElemType>* left, BinaryNode<ElemType>* right){
this->data = elem;
this->leftChild = left;
this->rightChild = right;
} /**************************************************************************************************/
template<class ElemType>
class BinaryTree{
private:
BinaryNode<ElemType>* root;
public:
BinaryTree();
BinaryTree(BinaryNode<ElemType>* r);
// ~BinaryTree();
BinaryNode<ElemType>* getRoot() const;
bool isEmpty() const;
void preOrder(BinaryNode<ElemType>* r) const;
void inOrder(BinaryNode<ElemType>* r) const;
void postOrder(BinaryNode<ElemType>* r) const;
}; template<class ElemType>
BinaryTree<ElemType>::BinaryTree(BinaryNode<ElemType>* r){
root= r;
} template<class ElemType>
BinaryTree<ElemType>::BinaryTree(){
root= new BinaryNode<ElemType>();
} template<class ElemType>
BinaryNode<ElemType>* BinaryTree<ElemType>::getRoot() const{
return root;
} template<class ElemType>
bool BinaryTree<ElemType>::isEmpty() const{
return root== false;
} template<class ElemType>
void BinaryTree<ElemType>::preOrder(BinaryNode<ElemType>* r) const{
if(r== NULL)
return;
cout<<r->data<<"\t";
preOrder(r->leftChild);
preOrder(r->rightChild);
} template<class ElemType>
void BinaryTree<ElemType>::inOrder(BinaryNode<ElemType>* r) const{
if(r== NULL)
return;
inOrder(r->leftChild);
cout<<r->data<<"\t";
inOrder(r->rightChild);
} template<class ElemType>
void BinaryTree<ElemType>::postOrder(BinaryNode<ElemType>* r) const{
if(r== NULL)
return;
postOrder(r->leftChild);
postOrder(r->rightChild);
cout<<r->data<<"\t";
} int main(){
BinaryNode<string>* right1= new BinaryNode<string>("RIGHT1");
BinaryNode<string>* left= new BinaryNode<string>("LEFT", NULL, right1);
BinaryNode<string>* right= new BinaryNode<string>("RIGHT");
BinaryNode<string>* root = new BinaryNode<string>("ROOT", left, right); BinaryTree<string>* tree= new BinaryTree<string>(root);
cout<<"preOrder: \t";
tree->preOrder(root);
cout<<"\ninOrder: \t";
tree->inOrder(root);
cout<<"\npostOrder: \t";
tree->postOrder(root);
cout<<endl; return ;
}

下面是运行结果:

xiaoq@xq-ubun:~/C/DataStructure$ ./BinaryTree.o
preOrder: ROOT LEFT RIGHT1 RIGHT
inOrder: LEFT RIGHT1 ROOT RIGHT
postOrder: RIGHT1 LEFT RIGHT ROOT
xiaoq@xq-ubun:~/C/DataStructure$

这个版本是初级版本,遍历采用递归方式。接下来将不断完善!

欢迎交流!

一个简单二叉树的C++实现(一)的更多相关文章

  1. C 封装一个简单二叉树基库

    引文 今天分享一个喜欢佩服的伟人,应该算人类文明极大突破者.收藏过一张纸币类型如下 那我们继续科普一段关于他的简介 '高斯有些孤傲,但令人惊奇的是,他春风得意地度过了中产阶级的一生,而  没有遭受到冷 ...

  2. C 构造一个 简单配置文件读取库

    前言 最近看到这篇文章, json引擎性能对比报告 http://www.oschina.net/news/61942/cpp-json-compare?utm_source=tuicool 感觉技术 ...

  3. 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截

    程序猿修仙之路--数据结构之你是否真的懂数组?   数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构  .要想在之后的江湖历练中通关,数据结构必不可少. ...

  4. c语言-构建一个静态二叉树

    第一.树的构建 定义树结构 struct BTNode { char data; struct BTNode* pLChild; struct BTNode* pRChild; }; 静态方式创建一个 ...

  5. 哪种缓存效果高?开源一个简单的缓存组件j2cache

    背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...

  6. 在Openfire上弄一个简单的推送系统

    推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...

  7. ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面

    前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...

  8. 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

  9. 如何开发一个简单的HTML5 Canvas 小游戏

    原文:How to make a simple HTML5 Canvas game 想要快速上手HTML5 Canvas小游戏开发?下面通过一个例子来进行手把手教学.(如果你怀疑我的资历, A Wiz ...

随机推荐

  1. 记录.net 中的常见术语

    --Entity Framework和NHibernate --EF和NH都是一种ORM技术.就是对象关系模型映射. --NHibernate和Entity Framework 4.0优劣势争论 -- ...

  2. 一維條碼 EAN13 的編碼方式

    何謂 EAN-13碼 ? ▲ 國家代號(3位數) 中華民國的國家代號為471. ▲ 廠商代號(6位數) 由本會核發給廠商6位數的廠商代號. ▲ 商品代號(3位數) 由廠商自行編定,按一物一號的原則,不 ...

  3. 关于结构体和C++类的内存地址问题

    关于结构体和C++类的内存地址问题   今天终于有时间写点东西了~ 太爽了  *_*   很多人都知道C++类是由结构体发展得来的,所以他们的成员变量(C语言的结构体只有成员变量)的内存分配机制是一样 ...

  4. Android Animation学习(一) Property Animation介绍

    Android Animation Android framework提供了两种动画系统: property animation (introduced in Android 3.0)和view an ...

  5. PHP-购物网站开发设计(一)

    2015-07-6 开始使用PHP完成简单购物网站的设计,首先要选择合适的软件平台,所以今天先记录平台的选择与搭建: 我选择使用Apache24 + PHP 5.6 + MySQL 开发环境完成PHP ...

  6. JavaSE_ 反射 目录(27)

    JavaSE学习总结第27天_反射 & 设计模式 & JDK5.7.8新特性27.01 反射_类的加载概述和加载时机27.02 反射_类加载器的概述和分类27.03 反射_反射概述27 ...

  7. POJ 3974 Palindrome(最长回文子串)

    题目链接:http://poj.org/problem?id=3974 题意:求一给定字符串最长回文子串的长度 思路:直接套模板manacher算法 code: #include <cstdio ...

  8. 关于asp.net 的一些好资料地址 , 防止丢失!

    学习数据结构的好网站 : http://student.zjzk.cn/course_ware/data_structure/web/practice/practice1.htm http://www ...

  9. python初探-copy

    python中,数据的拷贝有以下三种形式:赋值.浅copy和深copy.根据类型的不同,可以把数据分成以下两类:字符串和数字为一类,其他(包括列表.元祖.字典...)为一类. 在python中有池的概 ...

  10. selenium + python自动化测试环境搭建--亲测

    环境准备: 1.下载所学安装包: setuptools https://pypi.python.org/packages/2.7/s/setuptools/ selenium https://pypi ...