C++实现二叉树遍历
来源:互联网 发布:淘宝app图标素材 编辑:程序博客网 时间:2024/05/29 08:39
二叉树节点图:
简述:
分别使用前序遍历(LNR)、中序遍历(NLR)、后续遍历(LRN)实现数据输出
代码及实现:
/***********************二叉树遍历*********************/#include <iostream>using namespace std;template<class Type>class BSTree;template<class Type>class BinaryNode{ friend class BSTree<Type>;public: BinaryNode(): left(NULL),right(NULL){} BinaryNode(const Type& value): data(value),left(NULL),right(NULL){}private: Type data; BinaryNode *left; BinaryNode *right;};template<class Type>class BSTree{ BinaryNode<Type> *root;public: BSTree(): root(NULL){} BinaryNode<Type>* GetRoot() const{return root;} //用来加入一个新的值,并返回加入的值 Type AddValue(const Type& value); //以startNode为根节点打印其子节点数据 void printData_NLR(const BinaryNode<Type> *startNode); //前序遍历 void printData_LNR(const BinaryNode<Type> *startNode); //中序遍历 void printData_LRN(const BinaryNode<Type> *startNode); //后续遍历 void Cout(){ }};template<class Type>Type BSTree<Type>::AddValue(const Type& value){ if(root == NULL){ root = new BinaryNode<Type>(value); }else{ BinaryNode<Type> *node = root; while(1){ if(value > node->data){ if(node->right == NULL){ //此时node已经定位在空的节点处了 node->right = new BinaryNode<Type>(value); break; }else{ node = node->right; } }else{ if(node->left == NULL){ node->left = new BinaryNode<Type>(value); break; }else{ node = node->left; } } } } return value;}//前序遍历template<class Type>void BSTree<Type>::printData_NLR(const BinaryNode<Type> *startNode){ if(startNode == NULL){ return; }else{ cout << startNode->data << " "; printData_NLR(startNode->left); printData_NLR(startNode->right); }}//中序遍历template<class Type>void BSTree<Type>::printData_LNR(const BinaryNode<Type> *startNode){ if(startNode == NULL){ return; }else{ printData_LNR(startNode->left); cout << startNode->data << " "; printData_LNR(startNode->right); }}//后序遍历template<class Type>void BSTree<Type>::printData_LRN(const BinaryNode<Type> *startNode){ if(startNode == NULL){ return; }else{ printData_LRN(startNode->left); printData_LRN(startNode->right); cout << startNode->data << " "; }}int main(){ BSTree<int> tree; /********************填充数据*****************************/ tree.AddValue(7); tree.AddValue(4); tree.AddValue(10); tree.AddValue(1); tree.AddValue(5); tree.AddValue(-1); tree.AddValue(2); tree.AddValue(9); tree.AddValue(13); tree.AddValue(12); tree.AddValue(11); tree.AddValue(14); /*********************************************************/ cout << "前序遍历:根节点 -> 左子树 -> 右子树" << endl; tree.printData_NLR(tree.GetRoot()); cout << "\n\n中序遍历: 左子树-> 根节点 -> 右子树" << endl; tree.printData_LNR(tree.GetRoot()); cout << "\n\n后续遍历: 左子树 -> 右子树 -> 根节点" << endl; tree.printData_LRN(tree.GetRoot()); return 0;}
输出:
- 二叉树遍历及C语言实现
- 二叉树遍历及C语言实现
- 二叉树遍历及C语言实现
- C语言实现二叉树的遍历
- 二叉树遍历及C语言实现
- 二叉树遍历(c/c++实现)
- 数据结构(C实现)------- 遍历二叉树
- C实现二叉树的各种遍历
- c语言遍历二叉树实现
- C语言实现二叉树遍历
- 二叉树遍历 实现
- C实现二叉树的先序遍历,中序遍历,后序遍历
- c语言实现二叉树的先序遍历,中序遍历,后序遍历
- 二叉树的创建、遍历及搜索(C实现)
- 排序二叉树及其遍历 c语言实现
- 递归实现二叉树的建立及前中后序遍历 c
- 二叉树构造与遍历的C程序实现代码
- 二叉树遍历的c语言非递归实现
- Ubuntu 10.10 修改开机启动顺序
- JAVA套接字(Socket)101七天系列—第二天【套接字基础】 .
- Ruby on Rails,利用View Templates生成动态页面
- 第一个应用程序(二)
- Android应用中使用GridView实现数据网格显示(传智播客视频笔记)
- C++实现二叉树遍历
- C#入门经典学习5-类型转换
- aop (使用properties配置文件配置xml)(发表文章的时候要注意包与文件)
- Android字符串进阶:字体属性及测量(FontMetrics)
- uva-465-Overflow
- 将整数转换成字符串,在C51中你如何做?
- JAVA成员变量的访问权限
- quark mail 调整大小
- 常用AWK命令