1. 程式人生 > >根據二叉樹的先序遍歷結果輸出中序遍歷結果

根據二叉樹的先序遍歷結果輸出中序遍歷結果

題目描述

編一個程式,讀入使用者輸入的一串先序遍歷字串,根據此字串建立一個二叉樹(以指標方式儲存)。 例如如下的先序遍歷字串: 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,