描述

设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子。

输入

多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。

输出

每组数据输出一行。为交换左右孩子后的二叉树的先序序列。

输入样例 1

abcd00e00f00ig00h00
abd00e00cf00g00
0

输出样例 1

aihgbfced
acgfbed
//基于二叉链表的二叉树左右孩子的交换
#include <iostream>
using namespace std;
typedef struct LNode{char data; //存储这个结点的数据LNode *lchild; //结点的左子结点LNode *rchild; //结点的右子结点 LNode *parent; //结点的父结点
}LNode,*Tree;
void GetTree(Tree &tree,string::iterator &it){ //递归创建树 if(*it=='0'){ //如果读取到0 直接返回 iterator往后走 it++;return;}tree->data=*it; //(此时it必没有读到0) 赋值 it++; //it往后走 if(*it!='0'){tree->lchild=new LNode;tree->lchild->lchild=tree->lchild->rchild=tree->lchild->parent=NULL;} //如果it不是0就创建左子树 否则不创建;创建的时候要令它左右子树、父结点为空 不然会出问题 GetTree(tree->lchild,it);//对左子树进行创建;如果it指向0 结果就是it++ 不创建左子树 不影响程序 if(*it!='0'){tree->rchild=new LNode;tree->rchild->lchild=tree->rchild->rchild=tree->rchild->parent=NULL;} //如果it不是0就创建右子树 否则不创建;创建的时候要令它左右子树、父结点为空 不然会出问题GetTree(tree->rchild,it);//对右子树进行创建;如果it指向0 结果就是it++ 不创建左子树 不影响程序
}
void ChangeTree(Tree &tree){ //交换左右子树 LNode *p=tree->lchild; //以下三行代码交换左右子树 有空树也不影响 只交换了指针地址 tree->lchild=tree->rchild;  tree->rchild=p;if(tree->lchild) ChangeTree(tree->lchild); //令左子树交换他的左右子树 if(tree->rchild) ChangeTree(tree->rchild);//令右子树交换他的左右子树
}
void OutTree(Tree &tree){ //输出树 cout<<tree->data; //输出数据 if(tree->lchild) OutTree(tree->lchild); //输出左子树 if(tree->rchild) OutTree(tree->rchild); //输出右子树
}
void Calculate(string str){Tree tree=new LNode;tree->lchild=tree->rchild=tree->parent=NULL;std::string::iterator it=str.begin();GetTree(tree,it); //创造a树ChangeTree(tree); //交换树的左右子树 OutTree(tree); //输出树 cout<<endl;
}
int main(){string str; //一行数据 while(cin>>str&&str!="0") //输入一行数据到只有零为止 Calculate(str);return 0;
} 

孩子两个字被屏蔽了Qwq

3003基于二叉链表的二叉树左右子树的交换相关推荐

  1. 3003 基于二叉链表的二叉树左右节点的交换 附思路

    孩子为什么是敏感词.. 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为' ...

  2. 3006基于二叉链表的二叉树最长路径的求解(附思路)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为 ...

  3. 3010基于二叉链表的二叉树高度的计算(附思路,WA的一种可能情况及代码)

    基于二叉链表的二叉树高度的计算 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为 ...

  4. 3010基于二叉链表的二叉树高度的计算

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...

  5. 【数据结构】基于二叉链表的二叉树结点个数的统计

    基于二叉链表的二叉树结点个数的统计 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数 ...

  6. 基于二叉链表的二叉树高度的计算

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...

  7. 3007基于二叉链表的二叉树叶子结点到根结点的路径的求解(附DFS在树里的应用分析,思路详解)

    以下代码用到的前置知识:DFS算法 可以看这个视频~只用看这个就能懂了~ DFS深搜解决迷宫问题(原理分析+代码实现)_哔哩哔哩_bilibilihttps://www.bilibili.com/vi ...

  8. 3004基于二叉链表的二叉树的双序遍历(附题意解释)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次 ...

  9. 3009基于二叉链表的二叉树结点个数的统计(附思路)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元 ...

最新文章

  1. wallpaper怎么改后缀_腾讯微信视频号怎么引流?腾讯视频号引流有哪些方法?
  2. 手把手教你DIY最便宜的 arduino 温湿度计,详细图文视频教程
  3. dockerfile中的run_Docker3-Dockerfile创建镜像的方法(推荐docker file这种方法)
  4. 遇到:ORA-27121: UNABLE TO DETERMINE SIZE OF SHAR...
  5. 380免费云存储_从四个方面分析:云存储服务的特点、影响
  6. pytorch学习笔记(三十九):Fine-Tuning
  7. POJ 2718 Smallest Difference(dfs,剪枝)
  8. Bailian3179 最长单词【字符串】
  9. js右下角广告[兼容]
  10. 药店管理系统设计方案开发
  11. 计算机组成原理:P5-存储器(下)
  12. unity入门——实现一个简单的跑酷游戏(准备工作)
  13. GNN从入门到精通 -- Graph Embedding (2)
  14. you-get下载bilibili视频
  15. 七牛云上传视频并转码
  16. 〖Python网络爬虫实战③〗- 爬虫的基本原理
  17. [美国签证]准备材料及面签过程
  18. 余热回收系统:ORC低温余热发电原理
  19. oracle11g exp 00028,解决Linux系统下exp导入EXP-00028异常
  20. 红米4高配版_标注:2016060_官方线刷包_救砖包_解账户锁

热门文章

  1. 20220216-MISC-BUUCTF-后门查杀(D盾使扫描)-数据包中的线索(base64转图片)
  2. 流量为王还是转化至上?Facebook广告投放的取舍之道
  3. 转:心理安全:高绩效团队的基石
  4. 在 SQL 中计算分页元数据,无需额外的往返
  5. Linux菜鸟入门级命令大全
  6. 关于Bean的生命周期的测试与总结(面试重点)
  7. 好用的财务报销系统改变财务模式
  8. 【色彩L3笔记:调子】
  9. A First-Person Camera
  10. jffs2文件系统[1]--简介