博客作业05--查找
1.学习总结
1.1查找的思维导图
1.2 查找的学习体会
查找是一种十分有用的操作,查找运算的而主要运算是关键字的比较。在研究查找方法的时候必须先弄清这些方法所针对的数据结构是什么,对关键字的次序有什么要求。
2.PTA实验作业
2.1 题目1:6-2 是否二叉搜索树
2.2 设计思路(伪代码或流程图)
bool IsBST( BinTree T ) ; //判断给定二叉树是否二叉搜索树
如果T是二叉搜索树,则函数返回true,否则返回false
if(T为空树) return true
判断非空左子树的所有键值是否小于其根结点的键值
判断非空右子树的所有键值是否大于其根结点的键值
2.3 代码截图
2.4 PTA提交列表说明
刚写的时候思路有点乱,比较的结点的时候总是搞混
2.1 题目2:6-3 二叉搜索树中的最近公共祖先
2.2 设计思路(伪代码或流程图)
int LCA( Tree T, int u, int v );
树空或者u,v不在树中,返回error
若u或v就是最大值,返回T->key
若u,v在同一颗树上,返回T->key
若u小于T->key 递归访问左子树,查找最近公共祖先结点的键值
若u大于T->key 递归访问右子树,查找最近公共祖先结点的键值
2.3 代码截图
2.4 PTA提交列表说明
没有考虑u,v在同一颗树上的情况
2.1 题目3:7-2 航空公司VIP客户查询
2.2 设计思路(伪代码或流程图)
map <string,int> num
定义length表示飞行里程
若length<=k,则num[str]=num[str]+k,若length>k,则num[str]=num[str]+length
在map中寻找查询人的号码,找到输出其值,找不到输出No Info
2.3 代码截图
2.4 PTA提交列表说明
请教同学并上网百度了一下map的一些知识点,但还是不太懂
3.截图本周题目集的PTA最后排名
3.1 PTA排名
3.2 我的得分:2.5分
4. 阅读代码
typedef enum ColorType {RED, BLACK} ColorType;
typedef struct rbt_t{
int key;
rbt_t * left;
rbt_t * right;
rbt_t * p;
ColorType color;
}rbt_t;
typedef struct rbt_root_t{
rbt_t* root;
rbt_t* nil;
}rbt_root_t;
rbt_root_t* rbt_init(void){
rbt_root_t* T;
T = (rbt_root_t*)malloc(sizeof(rbt_root_t));
assert( NULL != T);
//用一个哨兵代表NIL。
T->nil = (rbt_t*)malloc(sizeof(rbt_t));
assert(NULL != T->nil);
T->nil->color = BLACK;
T->nil->left = T->nil->right = NULL;
T->nil->p = NULL;
T->root = T->nil;
return T;
}
红黑树是每个结点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树有如下的额外要求:
1.列表项结点是红色或黑色。
2.根是黑色。
3.所有叶子都是黑色(叶子是NIL结点)。
4.每个红色结点必须有两个黑色的子结点。(从每个叶子到根的所有路径上不能有两个连续的红色结点。)
5.从任一结点到其每个叶子的所有简单路径都包含相同数目的黑色结点。
为了便于处理红黑树中的边界情况,使用一个哨兵来代表所有的NIL结点,也就是说所有指向NIL的指针都指向哨兵T.nil。
红黑树和AVL树一样都对插入时间、删除时间和查找时间提供了最好可能的最坏情况担保。对于查找、插入、删除、最大、最小等动态操作的时间复杂度为O(lgn)