1.1查找的思维导图
1.2 查找学习体会
定义一个指针p
if(T为空树)
return true
if(T只有一个结点)
return true
先让p指向T->left,然后遍历其所有右子树,若p->data大于T->data,则return false;再让p指向T->right,接着遍历其所有左子树,若p->data小于T->data,则return false。
因为对所有的结点都适用上述判断方法,所以利用递归return IsBST(T->Left)&&IsBST(T->Right);。
声明map<string, string> mm
定义三个字符串型变量s1, s2, s3
先对s1进行判断
若为N则为申请功能,在map中寻找s2,若返回mm.end()则说明map中没有这个账号,则将账号密码make_pair(s2, s3),然后mm.insert(make_pair(s2, s3));若找到s2,cout<<"ERROR: Exist"。
若为L则为登录功能,首先获得map的迭代器map<string, string>::iterator it,在map中寻找账号,若找到则校验密码是否一致;若没有找到账号则cout<<"ERROR: Not Exist"。
声明 map <string,int> num
输入时,对输入的len进行判断,若len<=k,则在num[id]上加k,若len>k,则直接加len。
输出时,先在map中寻找该id,若找到则输出num[id]的值,若找不到则printf("No Info\n")。
复杂链表的复制。
复杂链表即链表结点结构中除了数据域data和next指针之外,还有一个指向随机结点的随机结点指针域。要对这种链表进行复制其难点是如果按照和普通链表一样一个一个结点向后复制的话,就无法正确的找到随机指针域所指向的结点。
#include<iostream>
#include<unordered_map>
using namespace std;
struct RandomListNode {
int label;
RandomListNode *next, *random;
RandomListNode(int x) : label(x), next(NULL), random(NULL) {}
};
RandomListNode *copyRandomList(RandomListNode *head)
{//使用容器
unordered_map<RandomListNode*, RandomListNode*> tmp;
RandomListNode *ret = new RandomListNode(0);
RandomListNode *p = head;
RandomListNode *q = ret;
while (p)
{
RandomListNode *copy = new RandomListNode(p->label);
tmp[p] = copy;
q->next = copy;
q = q->next;
p = p->next;
}
p = head;
while (p)
{
if (p->random)
tmp[p]->random = tmp[p->random];
p = p->next;
}
return ret->next;
}
原文:https://www.cnblogs.com/oracler0103/p/9091233.html