PAT1099 Build A Binary Search Tree

来源:互联网 发布:淘宝睡衣女模 编辑:程序博客网 时间:2024/06/14 06:27

题目链接

http://www.nowcoder.com/pat/5/problem/4323

题目描述:

n个节点,按顺序给出每个节点节点的左右孩子的下标,构造出一个数,再给一些整型数据,将这些数据放入对应的树的节点位置,使得构造出一个BST,然后层序输出这颗二叉树上所有节点的key值。

题目分析:

水题,一开始把题理解错了,以为是先构造玩左边的树,再构造右子树……结果就是按顺序来的。中序遍历的变形。

代码:

#include<iostream>#include<queue>#include<stack>#include <algorithm>using namespace std;struct Node{    int val;    int lChild;    int rChild;    Node() :val(0), lChild(-1), rChild(-1){    }};struct Node node[105];int num[105];int cnt = 0;void inorderTraverse(int root){    if (root != -1){        inorderTraverse(node[root].lChild);        node[root].val = num[cnt++];        inorderTraverse(node[root].rChild);    }}int main(){    int N;    cin >> N;    stack<int> s;    s.push(0);    int num1, num2,idx;    for (int i = 0; i < N;i++){        cin >> num1 >> num2;        node[i].lChild = num1;        node[i].rChild = num2;    }    for (int i = 0; i < N; i++){        scanf("%d",&num[i]);    }    sort(num,num+N);    inorderTraverse(0);    queue<int> q;    printf("%d",node[0].val);    if (node[0].lChild != -1){        q.push(node[0].lChild);    }    if (node[0].rChild != -1){        q.push(node[0].rChild);    }    while (!q.empty()){        idx = q.front();        q.pop();        printf(" %d",node[idx].val);        if (node[idx].lChild != -1){            q.push(node[idx].lChild);        }        if (node[idx].rChild != -1){            q.push(node[idx].rChild);        }    }    return 0;}
0 0
原创粉丝点击