1. 程式人生 > >九度 題目1467:二叉排序樹

九度 題目1467:二叉排序樹

程式碼設計:

#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;

struct Tree
{
    Tree *left;
    Tree *right;
    Tree *parent;
    int value;
}Tree1[101];

int creatT(Tree *t, Tree *src)
{
    if(src->value<t->value)
    {
        if(t->left==NULL)
        {
            t->left=src;
            src->parent=t;
            return 1;
        }
        else
        {
            creatT(t->left, src);
        }
    }
    else if(src->value>t->value)
    {
        if(t->right==NULL)
        {
            t->right=src;
            src->parent=t;
            return 1;
        }
        else
        {
            creatT(t->right,src);
        }
    }
    return 0;
}

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=0;i<n;i++)
        {
            scanf("%d",&Tree1[i].value);
            Tree1[i].left=NULL;
            Tree1[i].right=NULL;
            if(i==0)
            {
                Tree1[i].parent=NULL;
            }
            else
            {
                creatT(&Tree1[0],&Tree1[i]);
            }
        }
        for(int i=0;i<n;i++)
        {
            if(i==0)
                printf("-1\n");
            else
            {
                printf("%d\n",(Tree1[i].parent)->value);
            }
        }
    }
    return 0;
}

題目描述:

        二叉排序樹,也稱為二叉查詢樹。可以是一顆空樹,也可以是一顆具有如下特性的非空二叉樹:


        1. 若左子樹非空,則左子樹上所有節點關鍵字值均不大於根節點的關鍵字值;
        2. 若右子樹非空,則右子樹上所有節點關鍵字值均不小於根節點的關鍵字值;
        3. 左、右子樹本身也是一顆二叉排序樹。


  現在給你N個關鍵字值各不相同的節點,要求你按順序插入一個初始為空樹的二叉排序樹中,每次插入後成功後,求相應的父親節點的關鍵字值,如果沒有父親節點,則輸出-1。

輸入:

輸入包含多組測試資料,每組測試資料兩行。
第一行,一個數字N(N<=100),表示待插入的節點數。
第二行,N個互不相同的正整數,表示要順序插入節點的關鍵字值,這些值不超過10^8。

輸出:

輸出共N行,每次插入節點後,該節點對應的父親節點的關鍵字值。

樣例輸入:
5
2 5 1 3 4
樣例輸出:
-1
2
2
5
3