交換二叉樹中每個結點的左孩子和右孩子

我該學習了發表於2020-12-25

跪大佬,我要當大佬。

我可真是五體投地,甘拜下風,ttmd厲害了,給大佬跪了,我的榆木腦袋也許這輩子想不到大佬的想法,哭了哭了

-----(偷偷擦眼淚

PTA - 交換二叉樹中每個結點的左孩子和右孩子

上圖
由此可見,交換之後呢,動手寫一下,發現他們的中序序列是完全相反的啊,一個堆疊就完事了。
在這裡插入圖片描述

這種傳統思路也很好的,多學習學習啊!!!

類C語言–樹習題:交換二叉樹每個結點的左孩子和右孩子。

7-8 交換二叉樹中每個結點的左孩子和右孩子 (30分)

以二叉連結串列作為二叉樹的儲存結構,交換二叉樹中每個結點的左孩子和右孩子。

輸入格式:

輸入二叉樹的先序序列。

提示:一棵二叉樹的先序序列是一個字串,若字元是‘#’,表示該二叉樹是空樹,否則該字元是相應結點的資料元素。

輸出格式:

輸出有兩行:

第一行是原二叉樹的中序遍歷序列;

第二行是交換後的二叉樹的中序遍歷序列。

輸入樣例:

ABC##DE#G##F###

輸出樣例:

CBEGDFA
AFDGEBC

?AC

#include<bits/stdc++.h>
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;
}

相關文章