1. 程式人生 > >資料結構:樹的遍歷!按先序遍歷建立一棵樹,分別以先序、中序、後序遍歷輸出

資料結構:樹的遍歷!按先序遍歷建立一棵樹,分別以先序、中序、後序遍歷輸出

題目:樹的遍歷!按先序遍歷建立一棵樹,分別以先序、中序、後序遍歷輸出

樣例輸入

A B # D # # C E # # F # #

樣例輸出

PreOrder: A B D C E F
InOrder: B D A E C F
PostOrder: D B E F C A

程式碼:

//按先序遍歷建立一棵樹,分別以先序、中序、後序遍歷輸出
#include <iostream>
using namespace std;

struct node{
	char ch;
	node *left, *right;
};

node* creat() {
	node *root = new node;
	char c;
	cin >> c;
	if(c == '#') root = NULL;
	else {
		root->ch = c;
		root->left = creat();
		root->right = creat();
	}
	return root;
}

void preOrder(node *root) {
	if(root == NULL)  return;       //這條語句不能忘!!!
	cout << " " << root->ch;
	preOrder(root->left);
	preOrder(root->right);
}

void inOrder(node *root) {
	if(root == NULL)  return;
	inOrder(root->left);
	cout << " " << root->ch;
	inOrder(root->right);
}

void postOrder(node *root) {
	if(root == NULL)  return;
	postOrder(root->left);
	postOrder(root->right);
	cout << " " << root->ch;
}

int main() {
	node *root = creat();
	cout << "preOrder:";
	preOrder(root);
	cout << endl;
	cout << "inOrder:";
	inOrder(root);
	cout << endl;
	cout << "postOrder:";
	postOrder(root);
	cout << endl;
	return 0;
}

相關推薦

資料結構週週練】029 判斷無向圖是否為演算法原理詳解及程式碼分享

一、題目 設計一個演算法,判斷一個圖G是否為一棵樹,如果是,返回TRUE,否則,返回FALSE。 二、美麗的星座 星座真的好美好美。特別是當人類給它們賦予含義的那一刻,更美,彷彿有了靈魂一般。  是不是很美,是不是?你以為我是讓你過來看星星的嗎?你以為我是

資料結構建立分別輸出

題目:樹的遍歷!按先序遍歷建立一棵樹,分別以先序、中序、後序遍歷輸出 樣例輸入 A B # D # # C E # # F # # 樣例輸出 PreOrder: A B D C E F InOrder: B D A E C F PostOrder: D B E F C A

根據的結果建立【D.S】

根據先序遍歷的結果建立一棵樹 根據先序遍歷的結果還原一棵樹 則該樹是不確定的 例如 先序遍歷的結果ABC 有兩種形式 如果要還原一棵樹,除了要知道先序遍歷的結果,還需要知道樹的位置。 如果用#表示空樹,

從陣列形式建立(用於leetcode測試)

這段時間時不時地會在leetcode上做些題,最近做到的大部分是與樹相關的題。由於是在本地的IDE上碼程式碼,如果每次測試都要到leetcode上來測的話,不僅要選中複製貼上一遍,而且每次測試還要讀一會條,一次兩次還好,次數多了還是比較煩。而如果在本地的類內的main()函式裡測試的話,每次

Java資料結構根次序二叉排序

        昨天離開了創新創業基地,有點難受,雖然換來了高效,但是總覺的難受,一起度過了半年,昨天離開了。 說正事,今天更新二叉排序樹的中根遍歷。         思想:其實沒啥,類似與二叉樹的非遞迴中

Java資料結構二叉的層次

真香啊,前天還說日更部落格,昨天就真香了。 層次遍歷類似於二叉樹後根遍歷的非遞迴形式。依靠佇列輔助完成。 思路:從根節點開始,遇到結點則將它的子結點入隊,列印此結點後,再出隊一個結點,然後將該結點的子結點入隊。依次類推。 思路:從0開始,將1,2入隊,此時佇列中只有1,2然後列印0

Java資料結構二叉的前(遞迴和非遞迴)

嚶嚶嚶,兩個月沒寫部落格了,由於有點忙,今天開始日更部落格。 今天總結一下學習樹的先根,中根,後根。每種兩種方法,遞迴和非遞迴。 先根: 遞迴: 思路:先根遍歷,即第一次遇到的結點就開始列印。先一直遍歷左子樹,直到未空,然後右子樹,直到為空。遞迴下去。 過程:先將1進入方法

Java資料結構二叉

嚶嚶嚶,依舊是遞迴,從根節點開始分支左右樹,然後進入遞迴 上程式碼: public T search(T key) //查詢並返回首次出現的關鍵字為key元素 { return searchNode(root, k

資料結構二叉

博主技術渣,老是忘記二叉樹遍歷順序,故作此筆記提醒自己。 1.先序遍歷 根結點=>遍歷左子樹=>遍歷右子樹 2.中序遍歷 遍歷左子樹=>根結點=>遍歷右子樹 3.後序遍歷 遍歷左子樹=>遍歷右

C++資料結構二叉(二)——二叉

一、序言 在上一篇文章中《二叉樹的先序建立》,我們介紹了二叉樹的基本結構以及先序建立二叉樹,在本篇文章中,我們要對二叉樹進行遍歷,包括: 層序遍歷 遞迴先序遍歷、遞迴中序遍歷、遞迴後序遍歷 非遞迴中序遍歷 二、二叉樹的遍歷 BiTree.h

資料結構圖的

樹的遍歷 先根遍歷:樹非空,先訪問根節點,在按照從左到右的順序遍歷根節點的每一顆子樹。這個訪問順序與這棵樹對應的二叉樹的先序遍歷順序相同。 後根遍歷:樹非空,則按照從左到右的順序遍歷根節點的每一顆子樹,之後在訪問根節點。其訪問順序和這棵樹對應的二叉樹的中序遍歷順序相同。

Java資料結構圖的深度優先和廣度優先

更新啦,更新啦。 圖的深度優先遍歷:通過一個結點開始遍歷,直到遍歷到該結點沒有下一個結點為止,然後開始遞迴下一個結點,如果被訪問過,則跳過遍歷,依次類推。類似於一口氣到底,如果沒到底,則換個結點繼續到底。如果被訪問過的結點則不需要遍歷。 過程:A開始進入遞迴,A先列印。然後發現A的下一

資料結構圖的--深度優先廣度優先

                       圖的遍歷:深度優先、廣度優先 遍歷     圖的遍歷是指從圖中的某一頂點出發,按照一定的策略訪問圖中的每一個頂點。當然,每個頂點有且只能被訪問一次。  

資料結構圖——圖的最小生成樹最短路徑演算法

前言 在這裡,如果大家對圖或者資料結構還不太熟悉,想找一個動態的生成過程來參考,這是一個不錯的網站. 知識框架 圖的定義 線上性結構中,資料元素之間滿足唯一的線性關係,每個資料元素(除第一個和最後一個外)只有一個直接前趨和一個直接後繼; 在樹形結構中,資料元素之間有著明顯的層次關係,

資料結構線段及ST演算法比較

ST演算法是一種高效的計算區間最值的方法。 他的思想是將詢問區間分解成兩個最長的二次冪的長度的區間並集的形式。 所以與線段樹不同,這種區間分解其實存在相交的分解。 因此ST演算法能維護的只是一些簡單的資訊,比如區間最值或者區間gcd問題 ST演算法的優勢: 實現簡單(qwq為什麼我覺得線段樹更

資料結構&堆的概念持續編輯

樹---|---:由 一個根結點 和 N個子結點 及 連線線 構成,任意結點間不構成迴路        |---二叉樹---|---:樹的一種,且任意結點最多隻能有兩個子結點        |     &n

經典資料結構 B和B+詳細解析

維基百科對B樹的定義為“在電腦科學中,B樹(B-tree)是一種樹狀資料結構,它能夠儲存資料、對其進行排序並允許以O(log n)的時間複雜度執行進行查詢、順序讀取、插入和刪除的資料結構。B樹,概括來說是一個節點可以擁有多於2個子節點的二叉查詢樹。與自平衡二叉查詢樹不同,

資料結構二分查詢與二叉

關於二分查詢,原理其實不難,而且java Arrays類裡面有一個sorts()方法,可以先對資料進行排序,然後呼叫binarySerarch()方法,這個方法就是進行二分查詢用的。 下面是JDK的原始碼: private static int binarySe

演算法班筆記 第九章 資料結構區間陣列矩陣和狀陣列

第九章 資料結構:區間、陣列、矩陣和樹狀陣列 子陣列與字首和  Subarry PrefixSum[i] = A[0] + A[1] + ... + A[i-1], PrefixSum[0] = 0; 構造花費 O(n) 時間,O(n) 空間 Sum(i to j)

Java資料結構二叉排序的刪除操作

嚶嚶嚶,今天補回昨天沒有寫的部落格。 二叉排序樹的刪除操作比較簡單,但是思想很全面,因此本人就寫一篇部落格紀念一下。 思想:四種類型也可以是三種 1,刪除結點p的度為2,即有左右子樹。 此時有兩種方法,第一種將結點的左子樹在中根遍歷下的最後一個結點放到p的位置。第二種是將p結點