剑指offer 23----二叉树的前序、中序、后序、层序遍历
来源:互联网 发布:怎样做淘宝生意 编辑:程序博客网 时间:2024/06/08 02:23
二叉树的前序、中序、后序、层序遍历
#include <iostream>#include <Windows.h>#include <queue>using namespace std;template<class T>struct BinaryTreeNode //构建二叉树的节点,及左右子树的指针{T _data; //值BinaryTreeNode<T>* _left; //左子树BinaryTreeNode<T>* _right; //右子树BinaryTreeNode(const T& data) //构造:_data(data), _left(NULL), _right(NULL){}};template<class T>class BinaryTree //实现二叉树{typedef BinaryTreeNode<T> Node; //节点protected:Node* _root; //指向根节点的指针,里面保存根节点Node* CreateTree(T* a, size_t n, const T& invalid, size_t& index) //递归{Node* root = NULL;if (index < n && a[index] != invalid) //a不为非法值{//先序遍历建树root = new Node(a[index]); //根root->_left = CreateTree(a, n, invalid, ++index); //左root->_right = CreateTree(a, n, invalid, ++index); //右}return root;}void _PreOrder(Node* root) //前序实现 根 左 右{if (root == NULL){return;}cout << root->_data << " ";_PreOrder(root->_left);_PreOrder(root->_right);}void _InOrder(Node* root) //中序实现 左 根 右{if (root == NULL){return;}_InOrder(root->_left);cout << root->_data << " ";_InOrder(root->_right);}void _PostOrder(Node* root) //后序实现 左 右 根{if (root == NULL){return;}_PostOrder(root->_left);_PostOrder(root->_right);cout << root->_data << " ";}void _LevelOrder(Node* root) //层序 利用队列的特性依次遍历{if (root == NULL){return;}queue<Node*> tty;tty.push(root);while (!tty.empty()){if (tty.front()->_left != NULL){tty.push(tty.front()->_left);}if (tty.front()->_right != NULL){tty.push(tty.front()->_right);}cout << tty.front()->_data << " ";tty.pop();}cout << endl;}public:BinaryTree():_root(NULL){}BinaryTree(T* a, size_t n, const T& invalid = T()) //构建二叉树,数组存放{size_t index = 0;_root = CreateTree(a, n, invalid, index);}void PreOrder() //前序{_PreOrder(_root);}void InOrder() //中序{_InOrder(_root);}void PostOrder() //后序{_PostOrder(_root);}void LevelOrder() //层序{_LevelOrder(_root);}};
#include "tree.h"void test(){int array[10] = { 1, 2, 3, '#', '#', 4, '#', '#', 5, 6 };BinaryTree<int> p(array, sizeof(array) / sizeof(array[0]), '#');//构建二叉树时是用前序建的树cout << "前序: " << "";p.PreOrder();cout << endl;cout << "中序: " << "";p.InOrder();cout << endl;cout << "后序: " << "";p.PostOrder();cout << endl;cout << "层序: " << "";p.LevelOrder();}int main(){test();system("pause");return 0;}
阅读全文
5 0
- 剑指offer 23----二叉树的前序、中序、后序、层序遍历
- 二叉树的前/中/后/层序遍历(前/中/后序递归实现,层序队列实现)
- C# 二叉树的非递归中序 前序 后序遍历 层序遍历
- 二叉树的创建、前/中/后序遍历、按层遍历C语言实现
- python实现二叉树的前、中、后序遍历及按层遍历
- 剑指Offer-根据二叉树的前序和后序遍历重建二叉树
- 数据结构之二叉树的前序遍历、中序遍历、后序遍历、层序遍历
- 20170816_二叉树的建立+前序遍历+中序遍历+后序遍历+层序遍历
- 二叉树的遍历:前序、中序、后序、层序的非递归实现
- java版的二叉树的 前序、中序、后序、层序 遍历
- 二叉树的前序/中序/后序/层序的非递归遍历算法
- 二叉树的遍历——前序,中序,后序,层序
- 二叉树的前序、中序、后序、层序遍历
- 二叉树的前序、中序、后序和层序遍历
- 二叉树的前序,中序,后序和层序遍历java实现
- 二叉树的创建,前序,中序,后序,层序遍历
- 二叉树的创建及前序、中序、后序、层序遍历
- C++实现二叉树的非递归遍历(层,前,中,后序)
- jvm 垃圾回收机制 安全点
- String的使用
- ES内存配置
- JAVA控制CPU占用率(编程之美有感)(一)
- Nginx反向代理和负载均衡部署
- 剑指offer 23----二叉树的前序、中序、后序、层序遍历
- 2017年7月21日博雅培优幼小衔接班毕业校长讲话总结
- 关于一个判断Integer数是否为回文数的算法问题
- 关于Hash Map的工作原理与面试题的结合讨论
- Java学习【web基础-JSP案列-验证码】
- 模拟实现string深拷贝的两个版本
- git 删除一个远程分支
- 二层交换和三层交换
- Java线程安全总结(二)