二叉树的实现
来源:互联网 发布:福州广电网络电视电话 编辑:程序博客网 时间:2024/06/15 19:41
说明:使用Qt Creator完成 所以输入输出使用了Qt类。
二叉树的构建是按照前序顺序构建。
以字符#表示当前分支的递归结束
实现了前序、中序、后序遍历
提供了一些基本二叉树操作。
创建与删除结点交由BiTree统一管理,不提供对外接口
BiTree.h
struct BiNode{ char data; BiNode *Lnode,*Rnode;};class BiTree{public: explicit BiTree(); ~BiTree(); //二叉树遍历 void preOrder(BiNode *root); void inOrder(BiNode *root); void postOrder(BiNode *root); //二叉树常用操作 BiNode *getRoot(); bool isEmpty(); char getValue(BiNode *node); void setValue(BiNode *node,char val);private: BiNode *createBiTree(); void deleteBiTree(BiNode *root); //创建和删除节点全部交由BiTree统一管理,不提供对外的接口 BiNode *m_root=nullptr; //根节点指针。通过该指针可以实现二叉树内存释放 以及二叉树的遍历};
BiTree.cpp
<span style="font-size:14px;">#include "bitree.h"#include <QVector>#include <QDebug>BiTree::BiTree(){ m_root=createBiTree();}BiTree::~BiTree(){ deleteBiTree(m_root);}BiNode *BiTree::createBiTree(){ QTextStream in(stdin); char ch; in>>ch; BiNode *node; if(ch=='#') node=nullptr; else { node=new BiNode; node->data=ch; qDebug()<<"输入左节点:"; node->Lnode=createBiTree(); qDebug()<<"输入右节点:"; node->Rnode=createBiTree(); } return node;}BiNode *BiTree::getRoot(){ return m_root;}void BiTree::deleteBiTree(BiNode *root){ if(!root) return; else { deleteBiTree(root->Lnode); deleteBiTree(root->Rnode); delete root; root=nullptr; }}void BiTree::preOrder(BiNode *root){ if(!root) return; qDebug()<<root->data<<" "; preOrder(root->Lnode); preOrder(root->Rnode);}void BiTree::inOrder(BiNode *root){ if(!root) return; inOrder(root->Lnode); qDebug()<<root->data<<" "; inOrder(root->Rnode);}void BiTree::postOrder(BiNode *root){ if(!root) return; postOrder(root->Lnode); postOrder(root->Rnode); qDebug()<<root->data<<" ";}bool BiTree::isEmpty(){ if(m_root) return 1; else return 0;}char BiTree::getValue(BiNode *node){ return node->data;}void BiTree::setValue(BiNode *node, char val){ node->data=val;}</span><strong style="font-size: 18px;"></strong>
main.cpp
#include <QCoreApplication>#include <QDebug>#include "bitree.h"int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); qDebug()<<"Input character:"; BiTree biTree; qDebug()<<"ProOrderTraerse:"; biTree.preOrder(biTree.getRoot()); qDebug()<<"InOrderTraerse:"; biTree.inOrder(biTree.getRoot()); qDebug()<<"PostOrderTraerse:"; biTree.postOrder(biTree.getRoot()); return a.exec();}
1 0
- 二叉树的实现
- 二叉树的实现
- 二叉树的实现..
- 二叉树的实现
- 二叉树的实现
- 二叉树的实现
- 二叉树的实现
- 二叉树的实现
- 二叉树的实现
- 二叉树的实现
- 二叉树的实现
- 二叉树的实现
- 二叉树的实现
- 二叉树的实现
- 二叉树的实现
- 二叉树的实现
- 二叉树的实现
- 二叉树的实现
- 缓存热点key问题(mutex key)
- 大数据系列修炼-Scala课程48
- python With关键字用法(2)
- 关于Win7 64位 mysql 5.7下载安装问题
- Windows caffe vs2013训练自己的数据
- 二叉树的实现
- 大数据系列修炼-Scala课程49
- 九个Console命令,让 JS 调试更简单
- HTTP协议
- xml解析--通讯管理系统(图形界面版)
- 初学者读论文
- c++写杨辉三角
- android 安装 SDK的时候报错!!! 他说拒绝访问https://dl-ssl.google.com??
- iScroll中那些需要理解的细节部分