PTA7-1 - 交换二叉树中每个结点的左孩子和右孩子
题面
以二叉链表作为二叉树的存储结构,交换二叉树中每个结点的左孩子和右孩子。
输入格式
输入二叉树的先序序列。
提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。
输出格式
输出有两行:
第一行是原二叉树的中序遍历序列;
第二行是交换后的二叉树的中序遍历序列。
输入样例
ABC##DE#G##F###
输出样例
CBEGDFA
AFDGEBC
AC代码
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
struct node //typedef node*tree;
{
char x; // int x;
node*lc,*rc; // node *lc;node *rc
};
int L,cnt;
string s;
void build(node* &T)
{
if(s[cnt]=='#'||cnt==L) return;
T=new node;
T->x=s[cnt],T->lc=T->rc=NULL;
cnt++,build(T->lc);
cnt++,build(T->rc);
}
void swapp(node* &T)
{
if(T->lc==NULL&&T->rc==NULL) return;
swap(T->lc,T->rc); // node* temp;作为交换变量 不用也可以
if(T->lc!=NULL) swapp(T->lc);
if(T->rc!=NULL) swapp(T->rc);
}
void zh(node* T) //中序遍历
{
if(T->lc!=NULL) zh(T->lc);
printf("%c",T->x);
if(T->rc!=NULL) zh(T->rc);
}
int main()
{
cin>>s;
L=s.length(),cnt=0;
node* T=NULL; // = node *T=NULL = typedef node*tree,tree T=NULL;
build(T),zh(T),cout<<endl;
swapp(T),zh(T),cout<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」