九度OJ 1467 二叉排序树
来源:互联网 发布:python 相似度算法 编辑:程序博客网 时间:2024/05/15 04:24
- 题目描述:
二叉排序树,也称为二叉查找树。可以是一颗空树,也可以是一颗具有如下特性的非空二叉树:
1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值;
2. 若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值;
3. 左、右子树本身也是一颗二叉排序树。
现在给你N个关键字值各不相同的节点,要求你按顺序插入一个初始为空树的二叉排序树中,每次插入后成功后,求相应的父亲节点的关键字值,如果没有父亲节点,则输出-1。
- 输入:
输入包含多组测试数据,每组测试数据两行。
第一行,一个数字N(N<=100),表示待插入的节点数。
第二行,N个互不相同的正整数,表示要顺序插入节点的关键字值,这些值不超过10^8。
- 输出:
输出共N行,每次插入节点后,该节点对应的父亲节点的关键字值。
- 样例输入:
52 5 1 3 4
- 样例输出:
-1225
3
思路分析:
才看到这道题时,第一印象就是要构建二叉树了。当然C++库里有,但是我只会C语言啊。拿出书本来,看了看,感觉可以,于是就一气呵成,敲代码,编译,调试,通过。太痛快了。
代码如下:
#include<stdio.h>#include<stdlib.h>typedef struct bintree{int element;struct bintree *left;struct bintree *right;}bintree; //递归调用中必须为结构取一个名字bintree* makeempty(bintree *n) //没有用到,功能是初始化(引自 《数据结构与算法分析》){if (n != NULL){makeempty(n->left);makeempty(n->right);free(n);}return NULL;}bintree* create(int num)//初始化创建一个二叉树{bintree *n = malloc(sizeof(bintree));n->element = num;n->left = NULL;n->right = NULL;return n;}bintree* insert(int num, bintree *T) //插入操作{if (T == NULL){T = malloc(sizeof(bintree));if (T == NULL)printf("Out of space!");else{T->element = num;T->left = T->right = NULL;}}elseif (num < T->element){if (T->left==NULL) printf("%d\n", T->element); //如果可以插入,则输出当前节点的值,即父节点的值。if判断不能少!T->left = insert(num, T->left);}elseif (num > T->element){if (T->right==NULL) printf("%d\n", T->element);<span style="font-family: 'MicroSoft Yahei', Helvetica, Arial, Georgia, Simsun;">//如果可以插入,则输出当前节点的值,即父节点的值。if判断不能少!</span>T->right = insert(num, T->right);}return T;}/*void release(bintree *n) //原来自己写的释放二叉树的代码,结果一直报错。终于知道了,n->element不能free;{if (n){if (n->left){release(n->left);}if (n->right){release(n->right);}if (n->element){release(n->element); //如果element是char型,使用过strup()赋值则必须要free,否则会造成内存泄露}free(n);}}*/void release(bintree* pRoot){if (!pRoot)return;free(pRoot->right);free(pRoot->left);free(pRoot);}int main(void){int sum, i;int A[101];while (scanf("%d", &sum) != EOF){for (i = 0; i < sum; i++){scanf("%d", &A[i]);}bintree *start = create(A[0]);printf("-1\n");for (i = 1; i < sum; i++){start = insert(A[i], start);}release(start); //最后释放二叉树}return 0;}
收获:1、完整地构造了二叉树这一数据结构,虽然很浅,但是也算是一种进步;
2、不能照搬代码,比如说自己照搬release(注释过的哪那一段),取自《Head First C》,没有考虑到原来代码中使用过strup()函数,而自己的没有,随意乱用,导致了一个自己无法找出来的Bug,今后要铭记教训。
3、用递归的方法来free需要慢慢消化,基础不打劳,真的需要很多功夫来弥补。
0 0
- 九度OJ 1467 二叉排序树
- 九度OJ 1467 二叉排序树
- 九度oj-1467-二叉排序树
- 九度OJ - 1467 - 二叉排序树
- 九度OJ 1467 二叉排序树
- 题目1467:二叉排序树 九度OJ
- 九度oj 题目1467:二叉排序树
- 九度oj 1201:二叉排序树
- 九度OJ 1201 二叉排序树
- 九度OJ-1201-二叉排序树
- 九度OJ - 1201 - 二叉排序树
- 九度OJ-1201-二叉排序树
- 九度OJ 1201 二叉排序树
- 【九度OJ】题目1467:二叉排序树 解题报告
- 九度oj 题目1201:二叉排序树
- 九度oj 二叉排序树 1201,1009 c++
- 九度OJ题目1201:二叉排序树
- 九度OJ题目1201:二叉排序树
- UBUNTU编译DBVM的步骤及出现问题的解决方案(DBVM-->CheatEngine)
- iOS系统版本简介
- Rails 数据库操作
- HDU 2492 pingpang(树状数组)
- [C++]LeetCode 9: Palindrome Number(判断整数是否是回文数)
- 九度OJ 1467 二叉排序树
- 云平台发现服务构建:为什么不使用ZooKeeper
- leetcode 第114题 Flatten Binary Tree To Linked List
- 亚像素相关概念
- 为 Dreamweaver CS5 中的文档设置字体首选参数
- LeetCode Add Binary
- cocos2d-x 一套资源适配所有机型 教程(一)
- Selenium2(WebDriver)总结(二)---Firefox的firebug插件参数设置(补充)
- 如何避免云计算建设信息孤岛?