根據二叉樹的先序遍歷結果輸出中序遍歷結果
題目描述
編一個程式,讀入使用者輸入的一串先序遍歷字串,根據此字串建立一個二叉樹(以指標方式儲存)。 例如如下的先序遍歷字串: ABC##DE#G##F### 其中“#”表示的是空格,空格字元代表空樹。建立起此二叉樹以後,再對二叉樹進行中序遍歷,輸出遍歷結果。
輸入描述:
輸入包括1行字串,長度不超過100。
輸出描述:
可能有多組測試資料,對於每組資料, 輸出將輸入字串建立二叉樹後中序遍歷的序列,每個字元後面都有一個空格。 每個輸出結果佔一行。
示例1
輸入
abc##de#g##f###
輸出
c b e g d f a
#include <iostream> #include <string> using namespace std; string str; int i; struct TreeNode //樹節點 { char value; //節點的值 struct TreeNode *lchild, *rchild; TreeNode(char c): value(c), lchild(NULL), rchild(NULL){} //初始化 }; TreeNode* creatTree() //建立樹 { char c = str[i++]; if (c == '#') return NULL; TreeNode *root = new TreeNode(c); root->lchild = creatTree(); root->rchild = creatTree(); return root; } void inorder(TreeNode* root) //中序遍歷 { if (!root) return; inorder(root->lchild); cout << root->value <<" "; inorder(root->rchild); } void deleteTree(TreeNode* root) //刪除構建的樹防止記憶體洩露 { if (root->lchild != NULL) { deleteTree(root->lchild); root->lchild = NULL; } if (root->rchild != NULL) { deleteTree(root->rchild); root->rchild = NULL; } delete(root); } int main() { while(cin >> str) { i = 0; TreeNode *root = creatTree(); inorder(root); cout << endl; deleteTree(root); } return 0; }
相關推薦
根據二叉樹先序和中序遍歷結果求其後序遍歷
首先我們先複習下不同類別的遍歷: 先序遍歷:遍歷二叉樹時先遍歷根節點,然後遍歷其左子樹,最後遍歷右子樹。 中序遍歷:先遍歷其左子樹,然後遍歷根節點,最後遍歷右子樹。 後續遍歷:先遍歷左子樹,然後遍歷右子樹,最後遍歷根節點。 假如給定二叉樹的先序1,2,4,7,3,5,6,8,和中序4,7,2,1,5,3,8
根據二叉樹先序中序序列輸出後序
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <queue> using namespac
根據二叉樹的先序和中序遍歷,求出其後序遍歷序列
新手,摸索著前進.......這次用一個動態分配記憶體的方法,關於記憶體那方面,我也不是很懂,不過能執行也是超級開心的,哈哈由先序序列和中序序列可以唯一確定一棵二叉樹,演算法實現步驟如下:1)根據先序序列確定樹的根結點2)根據根結點在中序序列中的位置劃分出二叉樹的左右
根據二叉樹的先序遍歷結果輸出中序遍歷結果
題目描述 編一個程式,讀入使用者輸入的一串先序遍歷字串,根據此字串建立一個二叉樹(以指標方式儲存)。 例如如下的先序遍歷字串: ABC##DE#G##F### 其中“#”表示的是空格,空格字元代表空樹。建立起此二叉樹以後,再對二叉樹進行中序遍歷,輸出遍歷結果。 輸入描述:
二叉樹先序遍歷、中序遍歷和後序遍歷
二叉樹 com size 基本 html 後序 href col spa 轉自:https://www.cnblogs.com/polly333/p/4740355.html 基本思想>> 先序遍歷:根——>左——>右 先序遍歷:左——>
數據結構 遞歸和非遞歸方式實現二叉樹先序、中序和後序遍歷
nor post 後序遍歷 order else 對象 二叉樹先序 bre print 二叉樹的先序遍歷順序是根、左、右;中序遍歷順序是左、根、右;後序遍歷順序是左、右、根。 遞歸方式實現如下: 1 public class TreeNode { 2
二叉樹先序遍歷(非遞歸)
for fin light list 先序 int eno 遞歸 none 二叉樹的先序遍歷(非遞歸)特別簡單 直接上代碼,根節點先入棧,然後循環棧不為空,pop出來後讓右節點和左節點分別入棧 # Definition for a binary tree node. #
(拼多多筆試演算法)根據二叉樹的前序遍歷和中序遍歷確定後序遍歷的兩種思路
根據二叉樹的前序遍歷和中序遍歷確定後序遍歷 輸入:第一行:結點數目 第二行:前序遍歷陣列 第三行:中序遍歷陣列 輸出 :後序遍歷陣列 例如:第一行:7 第二行:6 4 2 5 3 1 7 第三行:4 2 5 6 1 3 7 輸出 :5 2 4 1 7 3 6 我思
鏈式二叉樹 先序、中序、後序 遍歷(遞迴、非遞迴)
參考部落格:click here! 鏈式二叉樹儲存結構: typedef int DataType; typedef struct BiNode { DataType data; struct BiNode *lc, *rc; // 左右子節點指標 int depth; } B
二叉樹先序遍歷、中序遍歷、後序遍歷的遞迴演算法與非遞迴演算法
首先是二叉樹資料結構的定義: typedef struct TNode *Position; typedef Position BinTree; /* 二叉樹型別 */ struct TNode{ /* 樹結點定義 */ int Data; /* 結點資料 */ BinTre
先序遍歷二叉樹(關鍵詞:樹/二叉樹/先序遍歷/先根遍歷/先序搜尋/先根搜尋)
先序遍歷二叉樹 遞迴演算法 def preorderTraversal(root): f = preorderTraversal return [root.val] + f(root.left) + f(root.right) if root else [] 非遞迴演算
二叉樹的建立,查詢,輸出,先序,中序 ,後序遍歷 具體操作
//註釋改日補上。。。 #include<iostream> #include<cstdio> #include<cstdlib> #include<malloc.h> using namespace std; typedef
二叉樹先序中序後序遍歷實現
一、遞迴實現 import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int
二叉樹先序遍歷(遞迴與非遞迴)及C語言實現
二叉樹先序遍歷的實現思想是: 訪問根節點; 訪問當前節點的左子樹; 若當前節點無左子樹,則訪問當前節點的右子樹; 圖 1 二叉樹 以圖 1 為例,採用先序遍歷的思想遍歷該二叉樹的過程為: 訪問該二叉樹的根節點,找到 1; 訪問節點 1 的左子樹,找到節點 2; 訪問節點 2 的左子
非遞迴建立二叉樹 先序 中序 後序遍歷
思想:用”棧”來消除遞迴。 主要是建立的過程,剛開始卡到了如果遇到’#’,那麼在else中間出棧之後還需要讀一個元素,這樣在遇到連續的”#”之後,退棧並不能達到合適的位置,最後聽了“巔峰”的建議,還是設定了flag,解決了問題,下面解釋下建立過程的思想:
3.1分別用遞迴和非遞迴方式實現二叉樹先序、中序和後序遍歷
題目 用遞迴和非遞迴方式,分別按照二叉樹先序、中序和後序列印所有的節點。 首先給出二叉樹節點結構定義: public class BinaryTreeNode { //二叉樹節點 private int data; private Bi
二叉樹先序建樹及先序遍歷
#include<iostream> using namespace std; int N = 0; typedef struct node { struct
根據二叉樹前序遍歷和中序遍歷序列求解後序遍歷的演算法
問題模型:已知某二叉樹前序遍歷序列為1,2,3,4,5,6,中序遍歷為3,2,4,1,6,5,設計程式計算後序序列。 關於這個問題你可以通過前序遍歷和中序遍歷建立一顆樹,然後通過後序遍歷進行求解,當然還可以直接根據已知兩序列直接推理後序序列,本文將對這種分析進行介紹。 利用
二叉樹先中後序遍歷的C++程式碼
馬上就要資料結構考試了,會考到二叉樹的遍歷演算法設計題,然後就自己總結了一個關於二叉樹的簡單演算法程式碼。 #include <iostream> #include <stdio.h> #include <stdlib.h> #inclu
二叉樹先序後序遞迴建立,前中後序層次非遞迴遍歷,以及統計葉子結點個數以及樹的深度
下面的程式碼實現了二叉樹的先序或者後序遞迴建立,然後實現了二叉樹的非遞迴的先序中序後序遍歷,還有層次遍歷,以及統計樹的葉子結點個數和樹的深度。其中非遞迴的先中後序遍歷用到了鏈棧,層次遍歷用到了佇列。 程式設計平臺為Visual Studio 2012,語言為C,但不是純C,