国产探花免费观看_亚洲丰满少妇自慰呻吟_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腳本

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贺兰县| 长治县| 高安市| 靖边县| 南城县| 乌海市| 周口市| 林周县| 婺源县| 武宁县| 化隆| 华池县| 惠安县| 明水县| 铜梁县| 七台河市| 南漳县| 修文县| 建阳市| 临武县| 德昌县| 丽江市| 淳化县| 同心县| 永州市| 湖州市| 霍林郭勒市| 长武县| 三明市| 安泽县| 博乐市| 乌兰察布市| 读书| 淳化县| 翼城县| 同江市| 华安县| 晋中市| 阿拉尔市| 昭苏县| 光山县|