今天做一个题二叉排序树,不知道出错在那里,
题目描述:
二叉排序树,也称为二叉查找树。可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值; 2. 若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值; 3. 左、右子树本身也是一颗二叉排序树。 现在给你N个关键字值各不相同的节点,要求你按顺序插入一个初始为空树的二叉排序树中,每次插入后成功后,求相应的父亲节点的关键字值,如果没有父亲节点,则输出-1。
自己debug一边,发现 for(i=0;i<n-1;i++){
insert(tmp,a[i]);
}后结果正常,但是到printf之后就出问题了,不知道为什么
#include<stdio.h>
struct Node{
int value;
struct Node *left;
struct Node *right;
};
void insert(struct Node *root,int x){
if(x<root->value){
if(root->left==NULL){
struct Node left;
left.value = x;
left.left=NULL;
left.right=NULL;
root->left=&left;
}else{
insert(root->left,x);
}
}
if(x>root->value){
if(root->right==NULL){
struct Node right;
right.value=x;
right.left=NULL;
right.right=NULL;
root->right=&right;
}else{
insert(root->right,x);
}
}
}
void printFather(struct Node *root){
if((root->left!=NULL)||(root->right!=NULL)){
printf("%d ",root->value);
}
if(root->left!=NULL){
printFather(root->left);
}
if(root->right!=NULL){
printFather(root->right);
}
}
int main()
{
int n;
struct Node node;
struct Node * root = &node;
scanf("%d",&n);
int value;
scanf("%d",&value);
root->value=value;
root->left=NULL;
root->right=NULL;
int i;
int a[100];
for(i=0;i<n-1;i++){
scanf("%d",&a[i]);
}
struct Node * tmp = root;
for(i=0;i<n-1;i++){
insert(tmp,a[i]);
}
printf("%d",root->left->value);
printf("-1 ");
printFather(root);
return 0;
}