您的位置:首页 > Web前端 > Node.js

1115. Counting Nodes in a BST (30)

2016-06-16 10:37 676 查看


1115. Counting Nodes in a BST (30)

时间限制

400 ms

内存限制

65536 kB

代码长度限制

16000 B

判题程序

Standard

作者

CHEN, Yue

A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:

The left subtree of a node contains only nodes with keys less than or equal to the node's key.

The right subtree of a node contains only nodes with keys greater than the node's key.

Both the left and right subtrees must also be binary search trees.

Insert a sequence of numbers into an initially empty binary search tree. Then you are supposed to count the total number of nodes in the lowest 2 levels of the resulting tree.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (<=1000) which is the size of the input sequence. Then given in the next line are the N integers in [-1000 1000] which are supposed to be inserted into an initially
empty binary search tree.

Output Specification:

For each case, print in one line the numbers of nodes in the lowest 2 levels of the resulting tree in the format:

n1 + n2 = n

where n1 is the number of nodes in the lowest level, n2 is that of the level above, and n is the sum.
Sample Input:
9
25 30 42 16 20 20 35 -5 28

Sample Output:
2 + 4 = 6


作为PATA最后一道 水的不行,完全可以用此题学习搜索二叉树建立。

思路: 应题目要求输出 最后两层的节点,建立好搜索二叉树的同时,将每个二叉树的高度加以标记;

#include<stdio.h>

#include<stdlib.h>

#include<iostream>

using namespace std;;

typedef struct Treenode * TreeBin;

struct Treenode

{

    int Data;

    TreeBin Left;

    TreeBin Right;

};

int a[1005];

int high=0;

TreeBin CreatTree(TreeBin T,int num,int L) //建立搜索二叉树

{   if(T==NULL) //根和新的节点的建立

    {   T=(TreeBin)malloc(sizeof(struct Treenode));

        a[L]++;

        T->Left=T->Right=NULL;

        T->Data=num;

        return T;

    }

    else if(T->Data>=num) //左节点建立

    {   L++; //层数++,并传入下一层

        T->Left=CreatTree(T->Left,num,L);

        return T;

    }

        else if(T->Data<=num) //右节点建立

        {   L++; //层数++,并传入下一层

            T->Right=CreatTree(T->Right,num,L);

            return T;

        }

}

int main()

{

    TreeBin T;

    T=NULL;

    int i,N;

    cin>>N;

    int temp;

    for(i=1;i<=N;i++)

    {

        cin>>temp;

        T=CreatTree(T,temp,1);

    }

    for(i=1001;i>=1;i--) //遍历最后一层 ,并输出 最后一层+上一层的和

    {

        if(a[i]!=0)

        {   printf("%d + %d = %d",a[i],a[i-1],a[i]+a[i-1]);

            break;

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: