一个简单二叉树的C++实现(一)

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

/*
*   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 0;
}

下面是运行结果:

[email protected]:~/C/DataStructure$ ./BinaryTree.o
preOrder:     ROOT    LEFT    RIGHT1    RIGHT
inOrder:      LEFT    RIGHT1    ROOT    RIGHT
postOrder:    RIGHT1    LEFT    RIGHT    ROOT
[email protected]-ubun:~/C/DataStructure$ 

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

欢迎交流!

时间: 2024-10-13 11:07:10

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

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

引文 今天分享一个喜欢佩服的伟人,应该算人类文明极大突破者.收藏过一张纸币类型如下 那我们继续科普一段关于他的简介 '高斯有些孤傲,但令人惊奇的是,他春风得意地度过了中产阶级的一生,而  没有遭受到冷酷现实的打击:这种打击常无情地加诸于每个脱离现实环境生活的  人.或许高斯讲求实效和追求完美的性格,有助于让他抓住生活中的简单现实.  高斯22岁获博士学位,25岁当选圣彼德堡科学院外籍院士,30岁任哥廷根大学数  学教授兼天文台台长.虽说高斯不喜欢浮华荣耀,但在他成名后的五十年间,这  些东西就像

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

前言 最近看到这篇文章, json引擎性能对比报告 http://www.oschina.net/news/61942/cpp-json-compare?utm_source=tuicool 感觉技术真是坑好多, 显露的高山也很多. 自己原先也 对着 json 标准定义http://www.json.org/json-zh.html 写过一般json解析器, 1000行后面跟上面一对比, 真是弱鸡. 后面就看了其中吹得特别掉几个源码,确实有过人之处,深感 自己不足. 下载一些也在研究,发现看懂会

一个简单的主机管理模拟程序

最近写的一个小练习,主要是把前面学的东西整合一下.写了一个简单的主机管理界面,主要是练习以下知识点: Session和Cookie进行登录验证(装饰器) 数据库的基本操作 (单表,1对多,多对多) Form的简单使用实现验证 Bootstrap模板写个简单界面 自定义分页 信号,中间件,CSRF,模板语言,JavaScript,AJAX等等 界面比较low,毕竟不是专业的. 附件里面是Django的源代码,3个文件放在一起winrar解压就可以打开

Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(无数截图)

[文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Windows 操作系统中,利用微软 Visual Studio 2005 编译生成 Libevent 2.0.10 静态链接库,并利用 Libevent 静态链接库,实现一个简单的 HTTP Web服务器程序:httpd.exe. 假设 Visual Studio 2005 的安装路径为“D:\Program

完成一个简单的时间片轮转多道程序内核代码

王康 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " 分别是1 存储程序计算机工作模型,cpu执行程序的基础流程: 2 函数调用堆栈:各种寄存器和存储主要是为了指令的传取值,通过eip,esp,eax,ebp和程序内存的分区,搭配push pop call return leave等一系列指令完成函数调用操作. 3 中断:多道批程序! 在复习一下上一讲的几个重要指令

一个简单的税利计算器(网页版)

嗯嗯,做一个简单的网页版的税率计算器,功能比较简单,但是相对比较实用.因为参考了一些其他作品,所以在计算汇率的时候习惯性的是以美元做单位.具体的功能有着较为详细的标注.仅供大家学习参考下. <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>JavaScript Loan Calculator</title>

利用JSP编程技术实现一个简单的购物车程序

实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP中数据库编程方法: 二.实验要求 : 利用JSP编程技术实现一个简单的购物车程序,具体要求如下. (1)用JSP编写一个登录页面,登录信息中有用户名和密码,分别用两个按钮来提交和重置登录信息. (2)编写一个JSP程序来处理用户提交的登录信息,如果用户名为本小组成员的名字且密码为对应的学号时,采用J

用L脚本语言开发一个简单的局域网聊天程序

#scp #这是一个简单的局域网聊天程序的例子 定义:字符串,string1 定义:字符串,string2 #addr1是对方的地址 #addr2是自己的地址 #如果addr1和addr2相同,就是自己和自己聊天 定义:地址,addr1,127.0.0.1,27015 定义:地址,addr2,127.0.0.1,27015 定义:整数,字节数,0 #在自己的UDP端口上监听 定义:网络连接,conn2,UDP 监听:conn2,addr2 #连接对方的UDP端口 定义:网络连接,conn1,UD

一个简单的Qt程序分析

本文概要:通过一个简单的Qt程序来介绍Qt程序编写的基本框架与一些Qt程序中常见的概念 #include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton *button = new QPushButton("Quit"); QObject::connect(button, SIGNA