北邮机试 | bupt oj | 97. 二叉排序树 | 输出父节点的值

本文介绍了一种二叉排序树的构建方法,通过顺序插入不同关键字的节点,并在每次插入后返回新节点的父节点关键字值。文章包含了一个C++实现的示例代码,展示了如何使用递归函数进行节点插入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉排序树

时间限制 1000 ms 内存限制 65536 KB

题目描述

二叉排序树,也称为二叉查找树。可以是一颗空树,也可以是一颗具有如下特性的非空二叉树:

  1.        若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值;
  2.        若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值;
  3.        左、右子树本身也是一颗二叉排序树。

现在给你N个关键字值各不相同的节点,要求你按顺序插入一个初始为空树的二叉排序树中,每次插入后成功后,求相应的父亲节点的关键字值,如果没有父亲节点,则输出-1。

输入格式

第一行,一个数字N(N<=100),表示待插入的节点数。

第二行,N个互不相同的正整数,表示要顺序插入节点的关键字值,这些值不超过108。

输出格式

输出共N行,每次插入节点后,该节点对应的父亲节点的关键字值

输入样例

5
2 5 1 3 4

输出样例

-1
2
2
5
3

AC代码

#include<bits/stdc++.h>
using namespace std;
#define For(i,n,m) for(int i=n;i<m;i++)
#define MAXN 110
typedef struct node{
    int value;
    struct node *lchild,*rchild;
}Node,*PNode;
int save = -1;
PNode insertNode(PNode t,int key){
    if(t == NULL){
        t = new Node();
        t->lchild = t->rchild = NULL;
        t->value = key;
        printf("%d\n",save);
        return t;
    }
    if(key<t->value){
        save = t->value;
        t->lchild = insertNode(t->lchild,key);
    }
    else{
        save = t->value;
        t->rchild = insertNode(t->rchild,key);
    }
    return t;
}

int main()
{
    int n;
    PNode T=NULL;
    scanf("%d",&n);
    int data[n];
    For(i,0,n){
        scanf("%d",&data[i]);
        T = insertNode(T,data[i]);
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值