3003基于二叉链表的二叉树左右子树的交换
描述
设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子。
输入
多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘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基于二叉链表的二叉树左右子树的交换相关推荐
- 3003 基于二叉链表的二叉树左右节点的交换 附思路
孩子为什么是敏感词.. 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为' ...
- 3006基于二叉链表的二叉树最长路径的求解(附思路)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为 ...
- 3010基于二叉链表的二叉树高度的计算(附思路,WA的一种可能情况及代码)
基于二叉链表的二叉树高度的计算 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为 ...
- 3010基于二叉链表的二叉树高度的计算
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...
- 【数据结构】基于二叉链表的二叉树结点个数的统计
基于二叉链表的二叉树结点个数的统计 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数 ...
- 基于二叉链表的二叉树高度的计算
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...
- 3007基于二叉链表的二叉树叶子结点到根结点的路径的求解(附DFS在树里的应用分析,思路详解)
以下代码用到的前置知识:DFS算法 可以看这个视频~只用看这个就能懂了~ DFS深搜解决迷宫问题(原理分析+代码实现)_哔哩哔哩_bilibilihttps://www.bilibili.com/vi ...
- 3004基于二叉链表的二叉树的双序遍历(附题意解释)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次 ...
- 3009基于二叉链表的二叉树结点个数的统计(附思路)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元 ...
最新文章
- wallpaper怎么改后缀_腾讯微信视频号怎么引流?腾讯视频号引流有哪些方法?
- 手把手教你DIY最便宜的 arduino 温湿度计,详细图文视频教程
- dockerfile中的run_Docker3-Dockerfile创建镜像的方法(推荐docker file这种方法)
- 遇到:ORA-27121: UNABLE TO DETERMINE SIZE OF SHAR...
- 380免费云存储_从四个方面分析:云存储服务的特点、影响
- pytorch学习笔记(三十九):Fine-Tuning
- POJ 2718 Smallest Difference(dfs,剪枝)
- Bailian3179 最长单词【字符串】
- js右下角广告[兼容]
- 药店管理系统设计方案开发
- 计算机组成原理:P5-存储器(下)
- unity入门——实现一个简单的跑酷游戏(准备工作)
- GNN从入门到精通 -- Graph Embedding (2)
- you-get下载bilibili视频
- 七牛云上传视频并转码
- 〖Python网络爬虫实战③〗- 爬虫的基本原理
- [美国签证]准备材料及面签过程
- 余热回收系统:ORC低温余热发电原理
- oracle11g exp 00028,解决Linux系统下exp导入EXP-00028异常
- 红米4高配版_标注:2016060_官方线刷包_救砖包_解账户锁