1 条题解

  • 0
    @ 2023-3-30 22:19:53

    C++ :

    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    
    struct Node {
        int     val, dep; //结点的权值、深度
        Node    *ch[2]; //ch[1]:右子树, ch[0]:左子树
        Node(const int& _val) : val(_val)
        { ch[0] = ch[1] = nullptr, dep = 0; }
    } *Root(nullptr);
    
    int    N, Ai, Dep;
    
    void Insert(const int& val) //将val插入到BST中
    {
        Node    *x(Root), *y(nullptr);
        while(x) //寻找插入的位置
            y = x, x = x -> ch[val > x -> val];
            //若val>x->val则在右子树,反之在左子树
        x = new Node(val);
        if(y)
            y -> ch[val > y -> val] = x, x -> dep = y -> dep + 1;
        else
            Root = x, x -> dep = 1;
        Dep = max(Dep, x -> dep);
        //插入BST并维护结点及其父亲信息
    }
    
    void Out(const Node* x) //后序遍历:左 右 根
    {
        if(x -> ch[0])
            Out(x -> ch[0]);
        if(x -> ch[1])
            Out(x -> ch[1]);
        printf("%d\n", x -> val);
    }
    
    int main()
    {
        cin >> N;
        while(N--) {
            scanf("%d", &Ai);
            Insert(Ai);
        }
    
        printf("deep=%d\n", Dep);
        Out(Root);
    
        return 0;
    }
    
    • 1

    信息

    ID
    1741
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者