题解 | 二叉树遍历

二叉树遍历

https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef

#include <iostream>
#include <string>
#include <queue>
#include <stack>
using namespace std;
struct treenode{
    char data;
    treenode *left;
    treenode *right;
};
struct queuenode{
    treenode *parent;
    bool isleft;
};
void buildtree(treenode *&proot,stack<queuenode *> &a,char c){
    if (c!='#'){
        treenode *pnew=new treenode;
        pnew->data=c;
        pnew->left=nullptr;
        pnew->right= nullptr;
        queuenode *p=new queuenode;
        p->parent=pnew;
        p->isleft= false;
        if (proot== nullptr) proot=pnew;
        else{
            queuenode *pcur=a.top();
            if (pcur->isleft== false){
                pcur->parent->left=pnew;
                pcur->isleft= true;
        } else{
                pcur->parent->right=pnew;
                a.pop();
                delete pcur;
            }
    }a.push(p);
    } else {queuenode *pcur=a.top();
        if (pcur->isleft== false){
            pcur->parent->left= nullptr;
            pcur->isleft= true;
        } else{
            pcur->parent->right= nullptr;
            a.pop();
            delete pcur;
        }}
}
void midorder(treenode *proot){
    if (proot== nullptr) return;
    midorder(proot->left);
    cout<<proot->data<<' ';
    midorder(proot->right);
}
int main() {
    string s;
    cin>>s;
    treenode *proot= nullptr;
    stack<queuenode *> a;
    int i = 0;
    for (; i < s.size(); ++i) {
        buildtree(proot,a,s[i]);
        if(i==s.size()-1) break;
    }
    midorder(proot);
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务