二叉树的前序、中序、后序、层序遍历
来源:互联网 发布:pk10网站源码 编辑:程序博客网 时间:2024/06/07 00:21
1、二叉树是N(N>=0)个节点的有限集合,该集合或者为空集(空二叉树),或者由一个根节点和两棵互不相交的、分别称为根节点的的左子树和右子树的二叉树组成;
#pragma once#include <vector>#include <queue>#include <iostream>#include <assert.h>using namespace std;typedef char DataType;struct BinaryNode{ BinaryNode* _left; BinaryNode* _right; DataType _data; BinaryNode(DataType x) :_left(NULL) ,_right(NULL) ,_data(x) {}};void CreateBinaryTree(BinaryNode*& root, const vector<DataType>& datas, int & i){ // 前序遍历构建二叉树 if (root == NULL && i < datas.size() && datas[i] != '#') { root = new BinaryNode(datas[i]); CreateBinaryTree(root->_left, datas, ++i); CreateBinaryTree(root->_right, datas, ++i); }}//前序遍历void PrevTraverse(BinaryNode* root){ if (root) { cout<<root->_data<<" "; PrevTraverse(root->_left); PrevTraverse(root->_right); }}//中序遍历void InTraverse(BinaryNode* root){ if (root) { InTraverse(root->_left); cout<<root->_data<<" "; InTraverse(root->_right); }}//后序遍历void PostTraverse(BinaryNode* root){ if (root) { PostTraverse(root->_left); PostTraverse(root->_right); cout<<root->_data<<" "; }}//层序遍历void cengTraverse(BinaryNode *root){ queue<BinaryNode> q; q.push(*root); while(!q.empty()) { *root = q.front(); cout<<root->_data<<" "; q.pop(); if(root->_left != NULL) { q.push(*root->_left); } if(root->_right != NULL) { q.push(*root->_right); } }}
void Test1(){ vector<DataType> v; v.push_back('A'); v.push_back('B'); v.push_back('C'); v.push_back('#'); v.push_back('#'); v.push_back('D'); v.push_back('#'); v.push_back('#'); v.push_back('E'); v.push_back('F'); BinaryNode* root = NULL; int index = 0; CreateBinaryTree(root, v, index); PrevTraverse(root); cout<<endl; InTraverse(root); cout<<endl; PostTraverse(root); cout<<endl; cengTraverse(root); cout<<endl;}int main(){ Test1(); return 0;}
运行结果前序:A B C D E F中序:C B D A F E 后序:C D B F E A层序:A B E C D F
0 0
- 二叉树的前/中/后/层序遍历(前/中/后序递归实现,层序队列实现)
- C# 二叉树的非递归中序 前序 后序遍历 层序遍历
- 二叉树的创建、前/中/后序遍历、按层遍历C语言实现
- python实现二叉树的前、中、后序遍历及按层遍历
- 数据结构之二叉树的前序遍历、中序遍历、后序遍历、层序遍历
- 20170816_二叉树的建立+前序遍历+中序遍历+后序遍历+层序遍历
- 二叉树的遍历:前序、中序、后序、层序的非递归实现
- java版的二叉树的 前序、中序、后序、层序 遍历
- 二叉树的前序/中序/后序/层序的非递归遍历算法
- 二叉树的遍历——前序,中序,后序,层序
- 二叉树的前序、中序、后序、层序遍历
- 二叉树的前序、中序、后序和层序遍历
- 二叉树的前序,中序,后序和层序遍历java实现
- 二叉树的创建,前序,中序,后序,层序遍历
- 剑指offer 23----二叉树的前序、中序、后序、层序遍历
- 二叉树的创建及前序、中序、后序、层序遍历
- C++实现二叉树的非递归遍历(层,前,中,后序)
- 二叉树创建及其遍历:前序、中序、后序、层序遍历等
- Hibernate中update方法的注意点
- android EditText默认问题
- win8.1下无法运行vc++6.0的解决方法
- 关于CentOS网络连接问题及第三天实习收获
- python中的input函数和raw_input函数的区别
- 二叉树的前序、中序、后序、层序遍历
- Kaprekar数
- Integer Partition(hdu4658)2013 Multi-University Training Contest 6 整数拆分二
- MySQL存储引擎总结
- HQL和SQL的区别
- Java 内存分配全面浅析
- android LayoutInflater 的使用
- QTreeWidget样式设置大全(一)
- js 写一个table