| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 Ranbo_ 于 2020-2-25 23:16 编辑  
 
刚学排序二叉树,题目描述这样的:有N个关键字值各不相同的节点,要求按顺序插入一个初始为空树的二叉排序树中,每次插入后成功后,求相应的父亲节点的关键字值,如果没有父亲节点,则输出-1。 
 
我的代码是这样的: 
- #include <stdio.h>
 
 - #include <stdlib.h>
 
  
- typedef struct Node{
 
 -     int val;
 
 -     struct Node *lchild;
 
 -     struct Node *rchild;
 
 - }BTNode;
 
 - //创建节点
 
 - void create(BTNode *T, int value)
 
 - {
 
 -     T = (BTNode*) malloc(sizeof(BTNode));
 
 -     T -> lchild = NULL;
 
 -     T -> rchild = NULL;
 
 -     T -> val = value;
 
 - }
 
 - //插入节点,并输出父节点的值
 
 - int insert(BTNode *T, int value, int father)//T为当前访问的节点,value是待插入节点的键值,father为当前访问节点的父节点的键值
 
 - {
 
 -     if(T == NULL)        //若T为空,说明已经找到叶节点,则创建新节点并输出父节点的值
 
 -     {
 
 -         create(T, value);
 
 -         //printf("%d\n", father);
 
 -         return father;
 
 -     }
 
 -     else if(value > T -> val)//若待插键值>当前节点键值,则插入到右子树上
 
 -     {
 
 -         return insert(T -> rchild, value, T -> val);
 
 -         //T -> rchild = insert(T -> rchild, value, T -> val);
 
 -     }
 
 -     else//若待插键值<当前节点键值,则插入到左子树上
 
 -     {
 
 -         return insert(T -> lchild, value, T -> val);
 
 -         //T -> lchild = insert(T -> lchild, value, T -> val);
 
 -     }
 
 - }
 
  
- /*
 
 - //后序遍历清空树
 
 - void clear(BTNode *p)
 
 - {
 
 -     clear(p -> lchild);
 
 -     clear(p -> rchild);
 
 -     free(p);
 
 - }
 
 - */
 
  
- int main()
 
 - {
 
 -     int n;
 
 -     int i;
 
 -     BTNode *T = (BTNode*) malloc(sizeof(BTNode));
 
 -     BTNode *root = T;
 
 -     scanf("%d", &n);//n个节点
 
 -         scanf("%d", &i);
 
 -         root -> val = i;
 
 -         root -> lchild = NULL;
 
 -         root -> rchild = NULL;
 
 -         printf("%d\n", -1);
 
 -         int value;
 
 -         for(i = 0; i < n - 1; i++)
 
 -         {
 
 -             T = root;
 
 -             //int father = -1;    //初始化储存的父节点的值
 
 -             int father;
 
 -             scanf("%d", &value);
 
 -             father = insert(T, value, -1);
 
 -             printf("%d\n", father);
 
 -         }
 
 -         /*
 
 -         BTNode *p = root;
 
 -         //后序遍历清空树
 
 -         clear(p);
 
 -         */
 
 -     return 0;
 
 - }
 
  复制代码 有一个问题,就是我不管输入啥玩意儿进去它永远都输出的是根节点的值,这是为啥呀 
 
 
 |   
 
 
 
 |