数据结构与算法(C语言版)__二叉树
来源:互联网 发布:员工管理系统 java 编辑:程序博客网 时间:2024/06/04 23:20
二叉树的表示:
数组表示:
链表表示:
二叉树的遍历:
前序遍历
中序遍历
后序遍历
层序遍历
今天我们用链表实现二叉树。
在VS2013中新建项目,在头文件中加入 二叉树.h在源文件中加入main.cpp
//二叉树.h#ifndef _二叉树_H#define _二叉树_H#include<queue>using namespace std;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); 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
//main.cpp#include<iostream>#include"二叉树.h"using namespace std;int main(){ cout << "测试二叉树:" << endl; 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 << "中序遍历:" << endl; tree.InOrder(); cout << endl; cout << "前序遍历:" << endl; tree.PreOrder(); cout << endl; cout << "后序遍历:" << endl; tree.PostOrder(); cout << endl; cout << "层序遍历:" << endl; tree.LevelOrder(); cout << endl; system("pause"); return 0;}
总结:二叉树有数组和链表的优点,二叉树的操作也很重要,这里用链表实现二叉树,借助队列实现了二叉树的层序遍历。
0 0
- 数据结构与算法(C语言版)__二叉树
- 数据结构与算法(C语言版)__二叉查找树
- 数据结构与算法(C语言版)__树
- 问题 H: 数据结构(C语言版)算法6.1至算法6.4__二叉树遍历
- 数据结构与算法(C语言版)__交换
- 数据结构与算法(C语言版)__冒泡排序
- 数据结构与算法(C语言版)__选择排序
- 数据结构与算法(C语言版)__顺序查找
- 数据结构与算法(C语言版)__二分查找
- 数据结构与算法(C语言版)__递归
- 数据结构与算法(C语言版)__排列组合
- 数据结构与算法(C语言版)__插入排序
- 数据结构与算法(C语言版)__快速排序
- 数据结构与算法(C语言版)__归并排序
- 数据结构与算法(C语言版)__栈
- 数据结构与算法(C语言版)__队列
- 数据结构与算法(C语言版)__链表
- 数据结构与算法(C语言版)__链表2
- poj3273
- libjpeg的安装与使用
- [乐意黎原创]chrome V55 已经取消 页面编码项了.
- Docker仓库管理
- Android 源码分析之基于NuPlayer的RTSP流媒体协议
- 数据结构与算法(C语言版)__二叉树
- 【React Native 安卓开发】----(Picker)【第四篇】
- java实现各种排序算法(包括冒泡排序,选择排序,插入排序,快速排序(简洁版))及性能测试
- Redis 缓存 + Spring 的集成示例
- three平面相机
- R语言-最优化_整数规划、线性规划求解(Rsymphony)
- 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法
- 用gen_init_cpio工具归档生成
- 关于几个常用java命令反编译(Fernflower decompiler)的结果