数据结构 二叉树
2016-04-15 21:25
274 查看
#ifndef _二叉树_H #define _二叉树_H #include <iostream> #include <queue> // 队列, template<class T> class BinaryTree; template<class T> class TreeNode // 这个类用来表示子节点, { public: TreeNode() { leftChild = NULL; rightChild = NULL; } T data; TreeNode<T> *leftChild; // 左节点, TreeNode<T> *rightChild; // 右节点, }; template<class T> class BinaryTree { public: // 二叉树可以进行的操作, void InOrder(); // 中序遍历, void InOrder(TreeNode<T>* currentNode); void PreOrder(); // 前序遍历, void PreOrder(TreeNode<T>* currentNode); void PostOrder(); // 后序遍历, void PostOrder(TreeNode<T>* currentNode); void LevelOrder(); // 层序遍历, void Visit(TreeNode<T>* currentNode); public: TreeNode<T> *root; }; template<class T> void BinaryTree<T>::LevelOrder() { std::queue<TreeNode<T>*> q; TreeNode<T>* currentNode = root; while(currentNode) { Visit(currentNode); if(currentNode->leftChild) q.push(currentNode->leftChild); if(currentNode->rightChild) q.push(currentNode->rightChild); if(q.empty()) return; currentNode = q.front(); q.pop(); } } template<class T> void BinaryTree<T>::Visit(TreeNode<T>* currentNode) { std::cout << currentNode->data; } template<class T> void BinaryTree<T>::InOrder() { InOrder(root); // 调用另外一个函数将根传进去, } template<class T> void BinaryTree<T>::InOrder(TreeNode<T> *currentNode) { if(currentNode) { InOrder(currentNode->leftChild); // 显示左节点, Visit(currentNode); // 显示当前的节点, InOrder(currentNode->rightChild); // 显示右节点, } } template<class T> void BinaryTree<T>::PreOrder() { PreOrder(root); } template<class T> void BinaryTree<T>::PreOrder(TreeNode<T>* currentNode) { if(currentNode) { Visit(currentNode); PreOrder(currentNode->leftChild); PreOrder(currentNode->rightChild); } } template<class T> void BinaryTree<T>::PostOrder() { PostOrder(root); } template<class T> void BinaryTree<T>::PostOrder(TreeNode<T>* currentNode) { if(currentNode) { PostOrder(currentNode->leftChild); PostOrder(currentNode->rightChild); Visit(currentNode); } } #endif
#include <iostream> #include "二叉树.h" using namespace std; int main() { BinaryTree<char> tree; TreeNode<char> 加,减,乘,除,a,b,c,d,e; 加.data = '+'; 减.data = '-'; 乘.data = '*'; 除.data = '/'; a.data = 'A'; b.data = 'B'; c.data = 'C'; d.data = 'D'; e.data = 'E'; tree.root = &加; 加.leftChild = &减; 加.rightChild = &e; 减.leftChild = &乘; 减.rightChild = &d; 乘.leftChild = &除; 乘.rightChild = &c; 除.leftChild = &a; 除.rightChild = &b; cout << "中序遍历:"; tree.InOrder(); // 中序遍历, cout << endl; cout << "前序遍历:"; tree.PreOrder(); cout << endl; cout << "后序遍历:"; tree.PostOrder(); cout << endl; cout << "层序遍历:"; tree.LevelOrder(); cout << endl; return 0; }
相关文章推荐
- 数据结构(线段树):BZOJ 3126: [Usaco2013 Open]Photo
- 面试题:java内存中的堆区和数据结构中的堆有什么区别
- 定义含有min函数的栈
- 数据结构 线性表中删除某一元素的程序
- 数据结构——单链表的基本操作
- (转载)动态规划:从新手到专家(关于动态规划算法最精彩的中文描述,没有之一)
- 数据结构中的赫夫曼树编码,KMP算法,图的深度优先遍历和广度优先遍历
- 数据结构(二叉树子系统:c语言实现)
- 数据结构(栈子系统:c实现)
- 数据结构(循环队列子系统:c实现)
- 二叉树的遍历详解(前序中序后序层次-递归和非递归)
- 多进程并发编程----进程间传递文件描述符基础~发送接收附属数据结构体介绍
- 数据结构---树---总结
- 数据结构之C语言实现哈夫曼树
- 数据结构(线性表子系统:c实现)
- 数据结构中的栈,在解决很多问题都有用处,比如括号匹配,迷宫求解,表达式求值等等 java中有封装好的类,可以直接调用。
- 数据结构——插入排序
- python 数据结构
- 数据结构--快速排序
- 【数据结构与算法】快排