7-2 交换二叉树每个结点的左孩子和右孩子

该博客介绍了如何通过先序遍历创建二叉树,并实现中序遍历。程序首先从用户输入构建二叉树,然后输出中序遍历序列。之后,程序交换了每个节点的左右子树,并再次进行中序遍历,证明了交换后中序遍历结果正好相反。这是一个关于数据结构与算法的实例分析。
摘要由CSDN通过智能技术生成

7-2 交换二叉树每个结点的左孩子和右孩子

以二叉链表作为二叉树的存储结构,编写程序实现:交换二叉树每个结点的左子树和右子树。以先序遍历构建一棵二叉树,输出中序遍历结果,交换每个节点的左右子树后,输出中序遍历结果。

输入格式:

输入一行字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。

输出格式:

第一行是原二叉树的中序遍历序列;

第二行是交换后的二叉树的中序遍历序列。

输入样例:

在这里给出一组输入。例如:

AB#CD###E#F##

输出样例:

在这里给出相应的输出。例如:

BDCAEF
FEACDB

分析:

交换左右子树后,中序遍历结果刚好相反

#include<iostream>
using namespace std;
typedef struct BNode
{
    char Date;
    struct BNode *lchild,*rchild;
}BNode,*BTree;
void PreCreate(BTree &T)
{//先序遍历创建二叉树
    char ch;
    cin>>ch;
    if(ch=='#') T=NULL;
    else
    {
        T=new BNode;
        T->Date=ch;
        PreCreate(T->lchild);
        PreCreate(T->rchild);
    }
}
void InTraverse(BTree T,string &str)
{//中序遍历输出二叉树
    if(T)//非空树
    {
        InTraverse(T->lchild,str);
        cout<<T->Date;
        str+=T->Date;//将输出结果存入str中
        InTraverse(T->rchild,str);
    }
}
//找到规律:交换前后二叉树中序遍历输出刚好相反
int main()
{
    BTree T;
    string str;//用来存中序遍历输出的结果
    PreCreate(T);
    InTraverse(T,str);
    cout<<endl;
    for(int i=str.length()-1;i>=0;--i)
        cout<<str[i];
    return 0;
}

测试点

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值