1. 程式人生 > >已知二叉樹的中序和後序遍歷排列,求前序遍歷

已知二叉樹的中序和後序遍歷排列,求前序遍歷

#include<iostream>
#include<string>
using namespace std;
void  Preorder(string inorder,string postorder)
{
	if(inorder.size()>0)
	{
		char ch=postorder[postorder.size()-1];
		cout<<ch;
		int k=inorder.find(ch);
		Preorder(inorder.substr(0,k),postorder.substr(0,k));
		Preorder(inorder.substr(k+1),postorder.substr(k,inorder.size()-k-1));
	}
}
int main()
{
	string inorder,postorder;
	cin>>inorder;
	cin>>postorder;
	Preorder(inorder,postorder);
	cout<<endl;
	return 0;
}

相關推薦

排列

#include<iostream> #include<string> using namespace std; void Preorder(string inorder,string postorder) { if(inorder.size()&

的先序列序列輸出該序列

iostream code tor data- span main ast avi dsm 題目描寫敘述 輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。 輸入 第一行輸入二叉樹的先序遍歷序列; 第二行輸入二叉樹的中序遍歷序列。 輸出 輸出該二叉樹的

的先畫出該

對一棵二叉樹進行遍歷,我們可以採取3中順序進行遍歷,分別是前序遍歷、中序遍歷和後序遍歷。 這三種方式是以訪問父節點的順序來進行命名的。 假設父節點是N,左節點是L,右節點是R,那麼對應的訪問遍歷順序如下: 前序遍歷    N->L->R 中序遍歷  

結果(先結果)還原建立

主函式 int main(int argc, char** argv){ int n, m; cin>>n; for(int i=0;i<n;i++){ cin>>m; v.push_back(m); } for(

如何得到它的

對一棵二叉樹進行遍歷,我們可以採取3中順序進行遍歷,分別是前序遍歷、中序遍歷和後序遍歷。這三種方式是以訪問父節點的順序來進行命名的。假設父節點是N,左節點是L,右節點是R,那麼對應的訪問遍歷順序如下: 前序遍歷    N->L->R中序遍歷    L->

重建()

由中序遍歷和後序遍歷重建二叉樹 中序遍歷中,根節點總是位於左右子樹中間,將左右子樹分開。 後序遍歷中,根節點總是在左右子樹之後。 重建演算法: 現在說一下重建根節點的過程,其他節點可以遞迴建立。 由

計算機技術——如何得到它的

對一棵二叉樹進行遍歷,我們可以採取3中順序進行遍歷,分別是前序遍歷、中序遍歷和後序遍歷。這三種方式是以訪問父節點的順序來進行命名的。假設父節點是N,左節點是L,右節點是R,那麼對應的訪問遍歷順序如下:前序遍歷    N->L->R中序遍歷    L->N-&

構建該

    // 前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6} public TreeNode reConstructBinaryTree(int[] pre, int[] in) { if (pre == null || in == null

如何

昨天ACM集訓的時候出現了這道題,沒接觸過半天都沒做出來,但看到解法還是挺好理解的。 一道HULU的筆試題(How I wish yesterday once more) 假設有棵樹,長下面這個樣子,它的前序遍歷,中序遍歷,後續遍歷都很容易知道。 PreOr

後續遍歷的順序是左右根,中序遍歷的順序是左根右  這點應該懂吧  由後續訪問序列可以看出最後一個被訪問的必定是這個樹的根  而中序遍歷的序列可以看出,一棵樹當根確定後,在根前面被訪問的是他的左子樹,後邊的是他的右子樹元素  弄懂了上邊兩點就開始做題吧  由後序遍歷序列是DBCEFGHA  為了方便,我寫小寫字

【面試算法系列】重建

已知一二叉樹的前序遍歷和中序遍歷重建二叉樹 1. 輸入前序遍歷陣列和中序遍歷陣列 2. 由前序遍歷順序可得,第一個節點是該二叉樹的根節點。 3. 在中序遍歷中尋找該根節點位置,該節點左邊是它的左子樹上的節點,右邊節點是它右子樹上的節點。 4. 獲取該節點左邊的節點數n,前序

序列構建序列java實現。

已知二叉樹的前序和中序序列,或者已知二叉樹的後序和中序序列,是能夠唯一確定一棵二叉樹的。但是如果僅知道二叉樹的前序和後序序列,一般是不能唯一確定一棵二叉樹的,但是可以分析有多少種可能的二叉樹,這個沒有具體研究,只知道節點少的情況還能湊合分析出來,但是節點多的情況下可能性太多

#include<iostream> using namespace std; //已知二叉樹前序遍歷和中序遍歷,求後序遍歷 void binary_tree_postorder(char* preorder,char* inorder,int length){

()

已知後序遍歷和中序遍歷重建二叉樹和已知前序遍歷和中序遍歷求後序遍歷的時候已經說明思路,這裡直接貼程式碼 # -*- coding:utf-8 -*- class Solution(object

給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。 輸入格式: 輸入第一行給出一個正整數N(≤30),是二叉樹中結點的個數。第二行給出其後序遍歷序列。第三行給出其中序遍歷序列。數字間以空格分隔。 輸出格式:

POJ2255-

nbsp def 二叉樹 水題 輸出 ostream -i sin root 水題……也可以不建立二叉樹來做 如果pre[pl:pr]對應in[il:ir],那麽pre[pl]是這棵樹的根,它在in的位置記為root,顯然root在[il,ir]內 那麽二叉樹的左子樹是in

java實現

  簡單介紹一下思想,先看前序,前序遍歷的第一個節點,就是該樹的根。在中序中找到該根的位置,設為index,在中序遍歷集合中,位於index之前的屬於根的左子樹,位於index之後的屬於根的右子樹。然後,對左右子數,遍

用python

這裡用到遞迴的方法:遞迴的關鍵是找到出口和遞迴的狀態(也就是要寫出遞迴第一個完整的過程),這樣計算機才能明白以後的若干步怎麼去走。當然,實際中遞迴的方法效率不高(不表明它不快),因為要頻繁呼叫函式本身,所以容易爆炸(哈哈哈)。程式碼:def last_sort(str1, s

或者結構的演算法

二叉樹中的前序遍歷是先訪問根結點,再訪問左子樹,右子樹。 中序遍歷是先訪問左子樹,再是根結點,最後是右子樹。 後序遍歷是先訪問左子樹,再是右子樹,最後是根結點。 演算法思路是先根據前序遍歷的第一個結點或者後序遍歷的最後一個結點,查詢對應在中序遍歷中的位置,就可以確定左子樹包

列為DBGEAFC列為DGEBFCA給出對應的

面對這樣的問題時我們該怎麼解決? 今天寫資料結構題,發現了一道總是碰見問題的題在這裡我寫了一種求解方法我自己稱它為分層遞迴求解。 第一步通過觀察我們知道後序遍歷時最後一個是根節點A 在中序序列中A的左邊是左子樹右邊是右子樹 第二步我們來畫第一層為根節點的右子樹為A-C-F