题解 | 二叉排序树

二叉排序树

https://www.nowcoder.com/practice/b42cfd38923c4b72bde19b795e78bcb3

#include <iostream>
using namespace std;

typedef struct Node {
    int data;
    Node* lchild, *rchild;
} Node;

void create(Node*& node, int data = -1) {
    node = new Node();
    node->data = data;
    node->lchild = node->rchild = NULL;
}

void build(Node* head, int data) {
    if (head->data < 0) {
        head->data = data;
        return;
    }
    if (data < head->data) {
        if (head->lchild == NULL) {
            Node* Temp;
            create(Temp, data);
            head->lchild = Temp;
        } else {
            build(head->lchild, data);
        }
    } else if(data == head->data){
        return;
    }else{
        if (head->rchild == NULL) {
            Node* Temp;
            create(Temp, data);
            head->rchild = Temp;
        } else {
            build(head->rchild, data);
        }
    }
}

void preOrder(Node *node, int pre){
    if(node == NULL)
        return;
    if(node->data != pre) cout << node->data << " ";
    preOrder(node->lchild, pre);
    preOrder(node->rchild, pre);    
}

void midOrder(Node *node, int pre){
    if(node == NULL)
        return;
    midOrder(node->lchild, pre);
    if(node->data != pre) cout << node->data << " ";
    midOrder(node->rchild, pre);    
}

void postOrder(Node *node, int pre){
    if(node == NULL)
        return;
    postOrder(node->lchild, pre);
    postOrder(node->rchild, pre);  
    if(node->data != pre) cout << node->data << " ";  
}

int main() {
    int n, data;
    while (cin >> n) {
        Node* head;
        create(head);
        // 建立二叉排序树
        for (int i = 0; i < n; i++) {
            cin >> data;
            build(head, data);
        }
        // 前序遍历
        preOrder(head, -1);
        cout << endl;
        // 中序遍历
        midOrder(head, -1);
        cout << endl;
        // 后序遍历
        postOrder(head, -1);
        cout << endl;
    }
}

全部评论

相关推荐

10-22 19:44
门头沟学院 Java
面了100年面试不知...:那我得去剪个头
点赞 评论 收藏
分享
牛客吹哨人:哨哥晚点统一更新到黑名单:能救一个是一个!26届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1525833
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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