题解 | 二叉树遍历

#include <iostream>
#include <string>

using std::cout;
using std::cin;
using std::endl;
using std::string;

struct TNode {
    char data;
    TNode* lchild;
    TNode* rchild;
};

int idx = 0;	// 在用户输入的字符串的索引(下标)
string input;	// 用户输入的字符串

// 先序遍历建树
void preBulid(TNode* root) {
    if (input[idx] == '#') {	// 若当前字符是#说明自子树是空树
        root->lchild = nullptr;
        ++idx;	// 指向下一个字符串
    } else {	// 否则说明左孩子存在
        TNode* lnode = new TNode(); 
        lnode->data = input[idx];
        ++idx;
        root->lchild = lnode;
        preBulid(lnode);
    }

    if (input[idx] == '#') {	// 说明右孩子不存在
        root->rchild = nullptr;
        ++idx;
    } else {	// 右孩子存在
        TNode* rnode = new TNode();
        rnode->data = input[idx];
        ++idx;
        root->rchild = rnode;
        preBulid(rnode);
    }
}

// 中序遍历输出结果
void InOrder(TNode* root) {
    if (root->lchild)
        InOrder(root->lchild);
    cout << root->data << ' ';
    if (root->rchild)
        InOrder(root->rchild);
}

int main() {
    while (getline(cin, input)) {
        idx = 1;
        if (input.size() == 0) {
            cout << endl;
            continue;
        } else if (input.size() == 1) {
            cout << input << endl;
            continue;
        }
        TNode* root = new TNode();
        root->data = input[0];

        preBulid(root);
        InOrder(root);
        cout << endl;
    }

    return 0;
}

全部评论

相关推荐

07-02 13:50
闽江学院 Java
点赞 评论 收藏
分享
07-03 16:02
门头沟学院 Java
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-04 18:02
好不容易拿到了字节Offer,鼠鼠做后端的,但家里人觉得可能被裁员不稳定,让鼠鼠去投国企,现在好纠结到底该咋选
文档传偷助手:该投就投吧,不过建议别放弃offer 拿到手里的才是最好的
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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