国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

1086. Tree Traversals Again (25)[遞歸+二叉樹]

2019-11-08 02:33:04
字體:
來源:轉載
供稿:網友

1. 原題: https://www.patest.cn/contests/pat-a-PRactise/1086

2. 思路:

遞歸+二叉樹的遍歷問題題意:用棧模擬樹的遍歷,輸出后序思路:入棧序列其實是二叉樹的前序,出棧序列是中序。所以,問題就是利用前序和中序輸出后序。顯然,用遞歸處理啦。已AC

3. 源碼

#include<iostream>#include<vector>#include<stack>#include<string>using namespace std;int N;//結點數vector<int> ino, pre;//分別存儲中序和前序的序列int findPos(int x);//找出前序中的第x個元素在中序的位置void post(int left, int right, int ro_pos);//輸出后序, 參數分別是中序的左、右邊界,前序的根位置int main(void){	//freopen("in.txt", "r", stdin);	cin >> N;	stack<int> sta;//棧	for (int i = 0; i < 2 * N; i++)//讀入數據	{		string s;		int data;		cin >> s;		if (s[1] == 'u')//構建前序序列		{			cin >> data;			sta.push(data);			pre.push_back(data);		}		else//構建中序序列		{			data = sta.top();			sta.pop();			ino.push_back(data);		}	}	post(0, N - 1, 0);//遞歸輸出后序	return 0;}int findPos(int x)//找出前序中的第x個元素在中序的位置{	int i;	for (i = 0; i < N; i++)	{		if (ino[i] == pre[x])			break;	}	return i;}void post(int left, int right, int ro_pos)//參數分別是中序的左、右邊界,前序的根位置{	if (left > right)//遞歸終止條件		return;	int ino_pos = findPos(ro_pos);	post(left, ino_pos - 1, ro_pos + 1);//遞歸左子樹	post(ino_pos + 1, right, (ro_pos + ino_pos - left + 1));//遞歸右子樹	if (ro_pos == 0)//輸出根結點		cout << pre[ro_pos] << endl;	else		cout << pre[ro_pos] << ' ';}
上一篇:PAT甲級1002 A + B

下一篇:vc6.0調用vb腳本

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 搜索| 金门县| 迁西县| 文水县| 大安市| 垣曲县| 韩城市| 大理市| 灌阳县| 夏河县| 阿拉善右旗| 蓝田县| 邢台市| 大余县| 佳木斯市| 泗阳县| 枝江市| 绍兴县| 沙田区| 襄樊市| 武功县| 翼城县| 香格里拉县| 张北县| 江永县| 米林县| 阳泉市| 哈尔滨市| 桐柏县| 新竹市| 龙井市| 美姑县| 黄大仙区| 博乐市| 民和| 阿合奇县| 通道| 灵石县| 广元市| 沁水县| 正定县|