|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码 有一个问题,就是我不管输入啥玩意儿进去它永远都输出的是根节点的值,这是为啥呀
|
|