二叉树链表的前,中,后序遍历
2015-06-24 12:14
246 查看
二叉树的遍历
主要代码片段
#include<iostream> using namespace std; struct BinNode { char data; BinNode *left; BinNode *right; }; class Tree { private: BinNode *head; BinNode *t; public: Tree(){ head = NULL; } BinNode *CreateNewBinNode(char data); //创建一个新节点,节点的内容为data,左右节点为空 BinNode *GetHead(){ return head; } //获取头结点 bool Insert(char data); //插入节点 void Visit(BinNode *node); //根据节点来访问起内容 void PreOrder(BinNode *t); //前序遍历 void InOrder(BinNode *t); //中序遍历 void PostOrder(BinNode *t); //后序遍历 }; int main() { char c; Tree BinTree; for (int i = 0; i < 7; i++) { cin>>c; BinTree.Insert(c); } BinNode *t = BinTree.GetHead(); cout << "\n前序遍历:" << endl; BinTree.PreOrder(t); cout << "\n中序遍历:" << endl; t = BinTree.GetHead(); BinTree.InOrder(t); cout << "\n后序遍历:" << endl; t = BinTree.GetHead(); BinTree.PostOrder(t); cout << endl; return 0; } BinNode *Tree::CreateNewBinNode(char data) { BinNode *Node = new BinNode; if (Node == NULL) { return NULL; } else { Node->data = data; Node->left = NULL; Node->right = NULL; return Node; } } bool Tree::Insert(char data) { if (head == NULL) //先判断头结点是否为空,先根是否为空 { head = new BinNode; head->data = data; head->right = NULL; head->left = NULL; t = head; return true; } BinNode *Node = CreateNewBinNode(data); if (Node == NULL) { return false; } BinNode *t = head; while (1) //顺序插入节点 { if (t->data == Node->data) { return true; } if (t->data > Node->data) //若节点小于则插入左边 { if (t->left == NULL) { t->left = Node; return true; } t = t->left; } else //大于则插入右边 { if (t->right == NULL) { t->right = Node; return true; } t = t->right; } } } void Tree::Visit(BinNode *node) { cout << node->data << " "; } void Tree::PreOrder(BinNode *t) { if (t == NULL) { return; } Visit(t); PreOrder(t->left); PreOrder(t->right); } void Tree::InOrder(BinNode *t) { if (t == NULL) { return; } InOrder(t->left); Visit(t); InOrder(t->right); } void Tree::PostOrder(BinNode *t) { if (t == NULL) { return; } PostOrder(t->left); PostOrder(t->right); Visit(t); }
运行结果:
输入:e b f a d g c
输出:
本代码为作者原创,若有引用请标明出处
若有疑问敬请留言,或者私信
相关文章推荐
- android windows 上JNI编程
- tomcat7通过setenv.bat设置JAVA_HOME
- HTMl5的sessionStorage和localStorage
- php加密解密
- How to use tcpdump on Android
- 按项目时间段,爬虫对状态码进行统计
- js实现a标签超链接提交form表单的方法
- php 调用.net的webservice 需要注意的
- python正则表达式复习1
- 完成端口中WSAENOBUFS错误的解决方案
- Hello, Dart!
- Android项目 三 冷笑话页面卡片式样式
- LeetCode|Substring with Concatenation of All Words(所有单词的串联的子字符串)
- TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流
- Python中的下划线详解
- mysql安装时到start service时就不响应了如何解决?
- TCP/IP详解学习笔记(10)-TCP连接的建立与中止
- mybatis基于Interceptor开发审计的自动更新(创建用户,创建日期,更新用户,更新日期)
- Xshell无法连接Ubuntu的解决办法
- MySQL学习系列4:运算符