将一棵二叉树的全部节点的左右子树交换顺序
来源:互联网 发布:gnu windows 编辑:程序博客网 时间:2024/05/17 06:02
模拟了层次遍历的算法。
#include<iostream>#include<malloc.h>#include<queue>#include<list>using namespace std;struct node{char c;node *lchild,*rchild;};char pre[100];char mid[100];void build(node* &t,int start1,int end1,int start2,int end2){int i=start2;while(pre[start1]!=mid[i])i=i+1;t=(node*)malloc(sizeof(node));t->c=pre[start1];if(i==start2)t->lchild=NULL;else build(t->lchild,start1+1,start1+i-start2,start2,i-1);if(i==end2)t->rchild=NULL;else build(t->rchild,start1+i-start2+1,end1,i+1,end2);}list<node*> que;list<node*> temp;void exchange(node *t){if(!temp.empty())temp.clear();temp.push_back(t);while(!temp.empty()){node* q;q=temp.front();if(q->lchild)temp.push_back(q->lchild);if(q->rchild)temp.push_back(q->rchild);temp.pop_front();node *r;r=q->lchild;q->lchild=q->rchild;q->rchild=r;}}void visit(node *t){if(!que.empty())que.clear();que.push_back(t);while(!que.empty()){node *x;x=que.front();cout<<x->c;que.pop_front();if(x->lchild)que.push_back(x->lchild);if(x->rchild)que.push_back(x->rchild);}}int main(){node *tree;int length;while(1==1){cout<<"pre"<<endl;cin>>pre;cout<<"mid"<<endl;cin>>mid;length=strlen(mid);build(tree,0,length-1,0,length-1);exchange(tree);visit(tree);}return 0;}
0 0
- 将一棵二叉树的全部节点的左右子树交换顺序
- 二叉树左右子树交换的算法
- 二叉树左右子树的交换
- 二叉树(三)二叉树的高度、交换两个子树左右节点
- 二叉树中所有节点的左右子树相互交换 递归与非递归程序
- 6_43_递归交换二叉树中所有节点的左右子树
- 二叉树中所有节点的左右子树相互交换 递归与非递归程序
- 编写算法交换二叉树中所有节点的左右子树
- 1021_二叉树的复制和左右子树交换
- 二叉树交换左右子树
- 二叉树的创建,遍历,求高度,算出节点数,算出叶子节点数,左右子树的交换,二叉树的销毁。
- 经典算法学习——交换二叉树的左右子树(二叉树的翻转)
- 交换左右子树(二叉树)
- 获取二叉树的叶子数、高度以及左右子树的交换的C语言实现
- 八.二叉树各种操作的C语言实现 深度遍历求深度,广度遍历求深度,交换左右子树,求叶子节点数
- 二叉树的操作(建树,先序遍历,交换左右子树,销毁
- 交换二叉树的左右子树——非递归方式
- 反转二叉树,即交换所有结点的左右子树,但不能使用递归方法。
- 【黑马程序员】C#笔记之数据转换
- vim 用户手册中文版本
- 嵌入式开发WIFI方案选型经历
- Servlet 3.0 新特性之web模块化, web-fragment.xml文件
- 杭电acm之1106-排序
- 将一棵二叉树的全部节点的左右子树交换顺序
- 最大公约数和最小公倍数
- Android官方终于支持 Navigation Drawer(导航抽屉)模式
- 深入理解拦截器原理及拦截器与过滤器的区别分析
- Java 异常
- HDU The Shortest Path 矩阵的最短路
- php heredoc用法注意事项
- ZOJ-2229
- Arrays的数组复制和返回数组字符串方法