二叉排序树输出爸爸

题目描述:二叉排序树,也称为二叉查找树。可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值; 2. 若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值; 3. 左、右子树本身也是一颗二叉排序树。 现在给你N个关键字值各不相同的节点,要求你按顺序插入一个初始为空树的二叉排序树中,每次插入后成功后,求相应的父亲节点的关键字值,如果没有父亲节点,则输出-1。

 

输入输出描述与样例:

输入包含多组测试数据,每组测试数据两行。
第一行,一个数字N(N<=100),表示待插入的节点数。
第二行,N个互不相同的正整数,表示要顺序插入节点的关键字值,这些值不超过10^8。
输出共N行,每次插入节点后,该节点对应的父亲节点的关键字值。

input

5

2 5 1 3 4

output

-1 2 2 5 3

解题思路:

一开始为了解决自定义结构体的问题大费周折,后来加上typedef才解决。没加typedef的时候原编写的代码是可以在c++环境下编译成功的,而在c的环境下却不行。后来去查了一下typedef struct与struct在C++与C中的区分,等下把原因写在小困惑内。

建树的过程:

1、先找到新结点的位置(根结点单独处理):遍历树结点,按照左小右大原则查找最终的结点位置。

2、每次新建一个结点时将其孩子置空,data值赋值为输入的值。并且输出当前结点(即要插入结点的父亲)的值。

3、第一次输入的一定是根结点,直接输出-1即可。(如果要求建树后再输出,可以以在建树时建立一个“0”结点,0结点链接根结点,若结点的双亲是0则输出-1。)

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 typedef struct BNode
 4 {
 5     struct BNode *lchild,*rchild;
 6     int data;
 7 } BNode,*tree;
 8 void Insert(tree root,int x)
 9 {
10 
11     if(root->data>x)
12     {
13         if(root->rchild) Insert(root->rchild,x);
14         else
15         {
16             tree next=(tree)malloc(sizeof(BNode));
17             next->data=x;
18             next->lchild=NULL;
19             next->rchild=NULL;
20             root->rchild=next;
21             printf("%d\n",root->data);
22         }
23     }
24     else if(root->data<x)
25     {
26         if(root->lchild) Insert(root->lchild,x);
27         else
28         {
29             tree next=(tree)malloc(sizeof(BNode));
30             next->data=x;
31             next->lchild=NULL;
32             next->rchild=NULL;
33             root->lchild=next;
34             printf("%d\n",root->data);
35         }
36     }
37 }
38 
39 int main()
40 {
41     int n,i,x;
42     while(scanf("%d",&n)!=EOF)
43     {
44         scanf("%d",&x);
45         tree root=(tree)malloc(sizeof(BNode));;
46         printf("-1\n");
47         root->data=x;
48         root->lchild=NULL;
49         root->rchild=NULL;
50         for(i=1;i<n;++i)
51         {
52             scanf("%d",&x);
53             Insert(root,x);
54         }
55     }
56     return 0;
57 }

 

posted @ 2018-01-17 19:14  土星狗蛋  阅读(268)  评论(0)    收藏  举报