前序——中序建树
来源:互联网 发布:未来国际局势知乎 编辑:程序博客网 时间:2024/06/07 00:55
//指针变量在递归中不会改变#include<stdio.h>#include<string.h>#include<stack>using namespace std;struct node{ char data; node* lchild; node* rchild;};char fd[100],sd[100];node* buildtree(int fds,int fde,int sds,int sde){ if(fds > fde) { return NULL; } char d = fd[fds]; int pos = sds; while(sd[pos++] != d){} --pos; node* n = new node; // 一定要重新生成内存 //否则指针在递归循环中一直指向一个内存空间 n->data = fd[fds]; n->lchild = buildtree(fds+1,fds+pos-sds,sds,pos-1); n->rchild = buildtree(fds+pos-sds+1,fde,pos+1,sde); return n;}void visit_rootlast(node* root){ stack<node*> sta; bool _end = false; node* p; node* mark = NULL; sta.push(root); while(!sta.empty()) { p = sta.top(); while(p) { p = p->lchild; sta.push(p); } mark = p; sta.pop(); p = sta.top(); while(mark == p->rchild) { mark = sta.top(); sta.pop(); printf("%c",mark->data); // 访问根节点 if(sta.empty()) // 访问完根节点栈为空结束循环 { _end = true; // 虽然栈为空但是 p指针还是没有改变,后面还有将p->rchild压栈的操作 break; } p = sta.top(); } if(!_end) { p = p->rchild; sta.push(p); } } return ;}int main(){ scanf("%s%s",fd,sd); int fde = strlen(fd)-1; int sde = strlen(sd)-1; node* root = buildtree(0,fde,0,sde); visit_rootlast(root); return 0;}
阅读全文
0 0
- 前序——中序建树
- leetcode 105【前序,中序建树】
- leetCode_根据前序、中序建树以及根据中序、后序建树
- 前序和中序建树,后序和中序建树
- 建树、前序、中序、后序遍历Java版
- 通过前序和中序遍历数组重建树
- 前序遍历和中序遍历 重建树
- 重建二叉树(前序,中序序列建树)
- 根据二叉树的前序和中序建树
- 二叉树·中序+前/后序遍历建树+前/中/后序遍历(链表)
- 【LeetCode】根据前序和中序遍历建树 && 根据中序遍历和后续遍历建树
- 树:前序建树,前序遍历,中序遍历,后序遍历,层序遍历
- 建树和遍历树(前序)
- Tree-----重建树(根据中序和前序,中序和后序)
- 根据前序与中序遍历建树后以后序遍历输出
- 剑指offer-重建二叉树 由前序和中序遍历序列建树
- 根据中序、前序(后序)输出树的后序(前序),不重建树
- 通过前序和后序遍历数组重建树
- IM多点登录与消息漫游架构随想
- 计算机组成与设计(一)——计算机概要与技术
- 内核模块已打开,但开机未加载
- Android Scrollview上滑停靠—悬浮框停靠在标题栏下方(防微博详情页)
- React中的props和state
- 前序——中序建树
- jQuery 显示和隐藏-冒泡传播点击
- 私有云落地解决方案之openstack高可用(pike版本)-keystone
- EasyDSS流媒体解决方案之多方式虚拟直播
- Servlet中的ServletContext和ServletConfig详解
- EventBus使用详解
- Hbase启动报错没有那个文件
- 几种锁机制(反正我一直都是有点模糊)
- JavaWeb学习笔记-XML-7