二叉樹遍歷 —— 牛客網

題目描述

編一個程序,讀入用戶輸入的一串先序遍歷字符串,根據此字符串創建一個二叉樹(以指針方式存儲)。 例如以下的先序遍歷字符串: ABC##DE#G##F### 其中「#」表示的是空格,空格字符表明空樹。創建起此二叉樹之後,再對二叉樹進行中序遍歷,輸出遍歷結果。c#

輸入描述

輸入包括1行字符串,長度不超過100。測試

輸出描述

可能有多組測試數據,對於每組數據,
輸出將輸入字符串創建二叉樹後中序遍歷的序列,每一個字符後面都有一個空格。
每一個輸出結果佔一行。spa

示例

輸入指針

abc##de#g##f###code

輸出遞歸

c b e g d f aci

思路

利用樹的非遞歸實現的規律。若是結點入棧時將其輸出就能夠獲得樹的前序遍歷結果,若是結點出棧時將其輸出就能夠獲得樹的中序遍歷結果。字符串

實現

#include<bits/stdc++.h>
using namespace std;

int main()
{
    string str;
    while(cin >> str)
    {
        stack<char> s;
        for(int i = 0;i < str.size();i++)
        {
            if(str[i] != '#') s.push(str[i]);
            else
            {
                if(!s.empty())
                {
                    cout << s.top() << " ";
                    s.pop();    
                } 
            }
        }
        cout << endl;
    }
    return 0;
}
相關文章
相關標籤/搜索