跪大佬,我要当大佬。
我可真是五体投地,甘拜下风,ttmd厉害了,给大佬跪了,我的榆木脑袋也许这辈子想不到大佬的想法,哭了哭了
-----(偷偷擦眼泪
PTA - 交换二叉树中每个结点的左孩子和右孩子
上图
由此可见,交换之后呢,动手写一下,发现他们的中序序列是完全相反的啊,一个堆栈就完事了。
这种传统思路也很好的,多学习学习啊!!!
类C语言–树习题:交换二叉树每个结点的左孩子和右孩子。
以二叉链表作为二叉树的存储结构,交换二叉树中每个结点的左孩子和右孩子。
输入二叉树的先序序列。
提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。
输出有两行:
第一行是原二叉树的中序遍历序列;
第二行是交换后的二叉树的中序遍历序列。
ABC##DE#G##F###
CBEGDFA
AFDGEBC
#include
using namespace std;
stack<char> s;
typedef struct node* tree;
struct node {
char data;
tree left;
tree right;
};
tree setTree() {
tree t=new node();
char ch;
cin>>ch;
if(ch!='#') {
t->data=ch;
t->left=setTree();
t->right=setTree();
} else
t=NULL;
return t;
}
void In(tree t) {//中序序列输出
if(t==NULL)
return ;
In(t->left);
cout<<t->data;
s.push(t->data);
In(t->right);
}
int main() {
tree t=setTree();
In(t);
cout<<endl;
while(!s.empty()) {
cout<<s.top();
s.pop();
}
return 0;
}