DS二叉树—二叉树镜面反转
Posted szu-ds-wys
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DS二叉树—二叉树镜面反转相关的知识,希望对你有一定的参考价值。
题目描述
假设二叉树用二叉链表存储,用先序序列结果创建。输入二叉树的先序序列,请你先创建二叉树,并对树做个镜面反转,再输出反转后的二叉树的先序遍历、中序遍历、后序遍历和层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。
--程序要求--
若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio
程序中若include多过一个头文件,不看代码,作0分处理
不允许使用第三方对象或函数实现本题的要求
输入
测试次数t
每组测试数据是一个二叉树的先序遍历序列,#表示空树
输出
对每棵二叉树,输出镜面反转后的先序、中序、后序和层次遍历序列。如果空树,输出四个NULL(后面不加空格)。如下:
NULL
NULL
NULL
NULL
样例输入
3 41#32###65##7## AB#C##D## AB##C##
样例输出
4 6 7 5 1 3 2 7 6 5 4 3 2 1 7 5 6 2 3 1 4 4 6 1 7 5 3 2 A D B C D A C B D C B A A D B C A C B C A B C B A A C B
提示
#include<iostream> using namespace std; class BitreeNode { public: char data; BitreeNode *left; BitreeNode *right; BitreeNode() { left=right=NULL; } }; class Bitree { public: int pos; BitreeNode *Root; char *strtree; Bitree(char *str) { pos=0; strtree=str; Root=CreateBitreeReverse(); } BitreeNode *CreateBitreeReverse() { char ch=strtree[pos]; pos++; if(ch==‘#‘) return NULL; else { BitreeNode *T=new BitreeNode(); T->data=ch; T->right=CreateBitreeReverse(); T->left=CreateBitreeReverse(); return T; } } void preorder(BitreeNode *T) { if(T!=NULL) { cout<<T->data<<" "; preorder(T->left); preorder(T->right); } return; } void inorder(BitreeNode *T) { if(T!=NULL) { inorder(T->left); cout<<T->data<<" "; inorder(T->right); } return; } void pastorder(BitreeNode *T) { if(T!=NULL) { pastorder(T->left); pastorder(T->right); cout<<T->data<<" "; } return; } void levelorder() { BitreeNode *Q[100]; int fr=0; int re=0; if(Root==NULL) return; Q[0]=Root; re++; while(fr!=re) { BitreeNode *temp=Q[fr]; cout<<temp->data<<" "; if(temp->left!=NULL) { Q[re]=temp->left; re++; } if(temp->right!=NULL) { Q[re]=temp->right; re++; } fr++; } return; } }; int main() { int T; cin>>T; while(T--) { char str[100]; cin>>str; Bitree Tree(str); if(Tree.Root==NULL) { cout<<"NULL"<<endl; cout<<"NULL"<<endl; cout<<"NULL"<<endl; cout<<"NULL"<<endl; } else { Tree.preorder(Tree.Root); cout<<endl; Tree.inorder(Tree.Root); cout<<endl; Tree.pastorder(Tree.Root); cout<<endl; Tree.levelorder(); cout<<endl; } } return 0; }
以上是关于DS二叉树—二叉树镜面反转的主要内容,如果未能解决你的问题,请参考以下文章