题解 | 树查找

树查找

https://www.nowcoder.com/practice/9a10d5e7d99c45e2a462644d46c428e4

#include <iostream>
#include <queue>
#include <math.h>
using namespace std;

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

void create(Node* &n){
    n = new Node;
    cin >> n->data;
    n->lchild = n->rchild = NULL;
}

Node* build_tree(int n){
    queue<Node*> q;
    // 头节点
    Node *head;
    create(head);
    q.push(head);
    n--;
    Node *cur, *lchild, *rchild;
    while(n>0){
        // 根节点
        cur = q.front();
        q.pop();
        // 左孩子
        create(lchild);
        cur->lchild = lchild;
        q.push(lchild);
        n--;
        // 右孩子
        if(n>0){
            create(rchild);
            cur->rchild = rchild;
            q.push(rchild);
            n--;
        }
    }
    return head;
}

void print(Node *head, int n, int d){
    int base = pow(2, d-1)-1;
    int top = pow(2, d)-1;
    int i=0;

    if(n < base+1){
        cout << "EMPTY" << endl;
    }

    queue<Node*> q;
    q.push(head);
    while(i<n){
        Node *cur = q.front();
        q.pop();
        i++;
        if(i>base && i<top){
            cout << cur->data << " ";
        }else if(i == top){
            cout << cur->data << endl;
            break;
        }
        if(cur->lchild != NULL){
            q.push(cur->lchild);
        } 
        if(cur->rchild != NULL){
            q.push(cur->rchild);
        }
    }
}

int main() {
    int n, d;
    while(cin>>n){
        // 建树
        Node * head = build_tree(n);
        cin>>d;
        print(head, n, d);
    }
    return 0;
}


全部评论

相关推荐

10-24 11:08
已编辑
上海大学 Java
TTT___TTT:这个价是前端吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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