二叉树的镜像
2015-06-30 15:01
295 查看
#include <iostream> #include <string.h> #include <string> #include <queue> #include <stack> using namespace std; string s; struct node { char data; struct node * left; struct node * right; }; node * creatBTree() { if(s.size() == 0) return NULL; node * tt = NULL; if(s[0] == '#') { s = s.substr(1, s.size() - 1); return NULL; } else { tt = new node; tt->data = s[0]; s = s.substr(1, s.size() - 1); tt->left = creatBTree(); tt->right = creatBTree(); } return tt; } void printPre(node * p) { if(p) { cout<<p->data; printPre(p->left); printPre(p->right); } } /* void fanzhuan(node * pp) { if(pp) { cout<<pp->data; fanzhuan(pp->right); fanzhuan(pp->left); } } */ void fanzhuan1(node * pp) { if(pp->left) fanzhuan1(pp->left); if(pp->right) fanzhuan1(pp->right); node * tmp = pp->left; pp->left = pp->right; pp->right = tmp; } void fanzhuan2(node * pp) { queue<node *> q; q.push(pp); while(!q.empty()) { node * r = q.front(); q.pop(); if(r->left) q.push(r->left); if(r->right) q.push(r->right); node * tmp = r->left; r->left = r->right; r->right = tmp; } } void fanzhuan3(node * pp) { node * tmp = pp; stack<node *> st; while(!st.empty() || tmp) { while(tmp) { st.push(tmp); tmp = tmp->left; } node * t = st.top(); st.pop(); tmp = t->right; pp = t->left; t->left = t->right; t->right = pp; } } int main() { cin>>s; node * t = creatBTree(); //printPre(t); fanzhuan3(t); printPre(t); return 0; }
相关文章推荐
- intellij idea 分屏设置
- 利用MATLAB截取图片某个区域
- 基于业务单元的开发与部署模式
- Oracle 监听器日志文件过大导致监听异常
- C++ typeid操作符
- 算法练习:TopK_1
- 适配器及适配器模式
- windows下java项目cpu占用较高原因分析
- Java反射机制的学习
- ubuntu的init过程以及如何添加开机启动服务
- 基础的排序查找算法
- 一种基于主客体模型的权限管理框架
- Socket、SocketServer与WebSocket的关系与区别
- c++线程池实现方法
- Android_Intent_文章列表
- com.rabbitmq.client.AlreadyClosedException: clean connection shutdown; reason: Attempt to use closed
- Spring MVC-HandlerExceptionResolver
- Github上优秀的Objective-C项目简介
- Problem A Where is the Marble?(查找排序)
- double,int与String之间转换