题解 | 二叉树遍历

二叉树遍历

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

#include <stdio.h>
#include <stdlib.h>

typedef struct node {
    char c;
    struct node* left;
    struct node* right;
} BinaryTreeNode;

BinaryTreeNode* createTree(char* s);
void inOrder(BinaryTreeNode* r);

int main() {
    char s[101];
    while (scanf("%s", s) != EOF) {
        BinaryTreeNode*root=createTree(s);
        inOrder(root),printf("\n");
    }
    return 0;
}

BinaryTreeNode* createTree(char* s) {
    BinaryTreeNode* root, *prev, *current;
    root = prev = current = NULL;
    BinaryTreeNode* stack[100];
    int i = 0, top = -1;
    while (s[i] != '\0') {
        if (s[i] != '#') {
            current = (BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
            current->c = s[i];
            current->left = current->right = NULL;
            stack[++top] = current;
            if (!root) root = current;
            else prev->left = current;
            prev = current;
        } else {
            while (s[i] == '#'&&top!=-1) {
                prev = stack[top--];
                i++;
            }
            if(s[i]!='\0'&&s[i]!='#'){
                current = (BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
                current->c = s[i];
                current->left = current->right = NULL;
                prev->right=current;
                stack[++top] = current;
                prev=current;
                }
        }
        i++;
    }
    return root;
}

void inOrder(BinaryTreeNode* r) {
    if(!r) return;
    if(r->left)inOrder(r->left);
    printf("%c ",r->c);
    if(r->right)inOrder(r->right);
}

全部评论

相关推荐

哥_留个offer先:跟他说,你这个最好用c#,微软就用c#Java不适合这个项目
点赞 评论 收藏
分享
秋盈丶:后续:我在宿舍群里和大学同学分享了这事儿,我好兄弟气不过把他挂到某脉上了,10w+阅读量几百条评论,直接干成精品贴子,爽
点赞 评论 收藏
分享
昨天 17:59
已编辑
长江大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务