剑桥offer(51~60)
51.题目描述
/*
struct TreeLinkNode {
int val;
struct TreeLinkNode *left;
struct TreeLinkNode *right;
struct TreeLinkNode *next;
TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) { }
};
*/
class Solution { TreeLinkNode* getNode(TreeLinkNode* pNode){
TreeLinkNode*pre = NULL;
while (pNode){
pre = pNode;
pNode = pNode->left;
}
return pre;
} public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
TreeLinkNode*tmp = pNode->next;
if (tmp){//如果有父节点
if (tmp->left == pNode&&pNode->right == NULL){//如果是左节点,就返回他的爸爸
return tmp;
}
else if (tmp->left == pNode&&pNode->right != NULL){
return getNode(pNode->right);
}
if (tmp->right == pNode){//如果是右节点,就返回他的右儿子
if (pNode->right){
return getNode(pNode->right);
}
else if (tmp->next->left == tmp){
return tmp->next;
}
else if (tmp->next->right == tmp){
return NULL;
}
}
}
else{//根节点
return getNode(pNode->right);
}
return NULL;
}
};
52.题目描述
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot)
{
return isSymmetrical(pRoot,pRoot);
} bool isSymmetrical(TreeNode* pRoot1,TreeNode* pRoot2)
{
if(pRoot1==NULL&&pRoot2==NULL)
return true;
if(pRoot1==NULL || pRoot2==NULL)
return false;
if(pRoot1->val!=pRoot2->val)
return false;
return isSymmetrical(pRoot1->left,pRoot2->right) && isSymmetrical(pRoot1->right,pRoot2->left); } };
53.题目描述
不使用reverse!!! 借助两个stack,分别为s1和s2。
1. 首先将根节点压入栈s1。
2. 将s1依次出栈,保存每个节点值,并依次将每个节点的左右节点压入栈s2
3. 将s2依次出栈,保存每个节点值,并依次将每个节点的右左节点压入本s1<注:这里是先压右子
节点再压左子节点>
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > result;
if (!pRoot) { return result; }
stack<TreeNode*> s1;
stack<TreeNode*> s2;
vector<int> temp;
s1.push(pRoot);
while (true) {
while (!s1.empty()) {
TreeNode* ptr = s1.top();
s1.pop();
if (!ptr) { continue; }
s2.push(ptr->left);
s2.push(ptr->right);
temp.push_back(ptr->val);
}
if (temp.empty()) { break; }
result.push_back(temp);
temp.clear();
while (!s2.empty()) {
TreeNode* ptr = s2.top();
s2.pop();
if (!ptr) { continue; }
s1.push(ptr->right);
s1.push(ptr->left);
temp.push_back(ptr->val);
}
if (temp.empty()) { break; }
result.push_back(temp);
temp.clear();
}
return result;
} };
54.题目描述
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) { queue<TreeNode*>qu1;
queue<TreeNode*>qu2;
vector<int> a;
vector<vector<int> >as;
if(!pRoot)
return as;
qu1.push(pRoot);
while(){
while(!qu1.empty()){
TreeNode* tmp=qu1.front();
qu1.pop();
if(!tmp)continue;
a.push_back(tmp->val);
qu2.push(tmp->left);
qu2.push(tmp->right);
}
if(a.empty()){break;}
as.push_back(a);
a.clear(); while(!qu2.empty()){
TreeNode* tmp=qu2.front();
qu2.pop();
if(!tmp)continue;
a.push_back(tmp->val);
qu1.push(tmp->left);
qu1.push(tmp->right);
}
if(a.empty()){break;}
as.push_back(a);
a.clear(); }
return as;
} };
55.题目描述
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
private:
TreeNode* decode(char *&str) {
if(*str=='#'){
str++;
return NULL;
}
int num = ;
while(*str != ',')
num = num* + (*(str++)-'');
str++;
TreeNode *root = new TreeNode(num);
root->left = decode(str);
root->right = decode(str);
return root;
}
public:
char* Serialize(TreeNode *root) {
if(!root) return "#";
string r = to_string(root->val);
r.push_back(',');
char *left = Serialize(root->left);
char *right = Serialize(root->right);
char *ret = new char[strlen(left) + strlen(right) + r.size()];
strcpy(ret, r.c_str());
strcat(ret, left);
strcat(ret, right);
return ret;
}
TreeNode* Deserialize(char *str) {
return decode(str);
}
};
56.题目描述
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution { public:
TreeNode* KthNode(TreeNode* pRoot, int k)
{
vector<TreeNode*>a; stack<TreeNode*>stack;
TreeNode* p = pRoot; while(p || !stack.empty()){
if(p!=NULL){
stack.push(p);
p = p->left;
}else{
p = stack.top();
a.push_back(p);
stack.pop();
p = p ->right;
}
} if(k > a.size()){
return NULL;
}else if(k == ){
return NULL;
}else{
return a[k-];
}
} };
57.题目描述
class Solution {
vector<int>a;
public:
void Insert(int num)
{
a.push_back(num);
}
double GetMedian()
{
vector<int>b=a;
sort(b.begin(), b.end());
if(b.size()% == ){
return b[b.size()/];
}else{
return (b[b.size()/]+b[b.size()/-])/2.0;
}
} };
58.题目描述
class Solution { int getVal(vector<int>v){
int max = v[];
for (int i = ; i<v.size(); i++){
if (max < v[i]){
max = v[i];
}
}
return max;
} public:
vector<int> maxInWindows(const vector<int>& num, unsigned int size)
{
vector<int>a;
vector<int>tmp;
if (num.size()<size||size == )
return a;
for (int i = ; i<num.size() - size+; i++){
for (int j = ; j<size; j++){
tmp.push_back(num[j + i]);
}
a.push_back(getVal(tmp)); tmp.clear();
}
return a;
}
};
59.题目描述
60.题目描述
剑桥offer(51~60)的更多相关文章
- 剑指 Offer 51. 数组中的逆序对 + 归并排序 + 树状数组
剑指 Offer 51. 数组中的逆序对 Offer_51 题目描述 方法一:暴力法(双层循环,超时) package com.walegarrett.offer; /** * @Author Wal ...
- 【Java】 剑指offer(51)数组中的逆序对
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成 ...
- 剑指offer 面试60题
面试60题 题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值出现的概率. 解决代码:
- 【Offer】[60] 【n个骰子的点数】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S.输入n,打印出s的所有可能的值出现的概率. [牛客网刷题地址]无 思路分析 递归的方 ...
- 【剑指Offer】60、按之字形顺序打印二叉树
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 题解:BFS 主要的方法与BFS写法没什么区 ...
- 剑指offer(60)把二叉树打印成多行
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目分析 从上到下打印二叉树我们知道用队列可以实现,但是如果多行打印怎么做呢? 我们需要分割,在行与行之间进行分割.如何分割 ...
- 剑指Offer 51. 构建乘积数组 (数组)
题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不 ...
- [剑指Offer] 51.构建乘积数组
题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不 ...
- 剑桥offer(41~50)
41.题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). class Solution { pub ...
随机推荐
- 对网页进行截图(selenium)
import os def insert_img(driver,file_name): #获取当前路径,并转换为字符串 base_dir=str(os.path.dirname(__file__)) ...
- TPO-12 C1 Revise a Hemingway paper
TPO-12 C1 Revise a Hemingway paper 第 1 段 1.Listen to a conversation between a student and a professo ...
- TW实习日记:第16天
前端的样式bug实在是太太太莫名其妙了,尤其是封装好的组件,一层套一层的,根本不知道是哪一层出了问题...除了改bug就是做新功能,真想吐槽一下这个项目的留言板,根本没人会用吧...这功能实在是太老旧 ...
- nodejs笔记--mysql篇(四)
测试连接 var mysql = require('mysql'); //调用MySQL模块 //创建一个connection var connection = mysql.createConnect ...
- jQuery File Upload文件上传插件简单使用
前言 开发过程中有时候需要用户在前段上传图片信息,我们通常可以使用form标签设置enctype=”multipart/form-data” 属性上传图片,当我们点击submit按钮的时候,图片信息就 ...
- mysql 只返回一条数据
问题描述: 需要得到时间最近的一条记录,但是按照时间字段排完序之后,得到的是全部. 解决办法: order by createtime desc //降序:asc:升序 LIMIT 1
- scrapy(2)——scrapy爬取新浪微博(单机版)
Sina爬虫教程 Scrapy环境搭建 环境:window10 + python2.7(包含scrapy)+ mongoDB 1.1 安装集成了python2.7的anaconda ana ...
- WIN8/8.1/10进入BIOS方法图解
1.首先点击桌面左下角的"开始". 2.然后点击电源. 3.然后按住shift,同时点击"重启".于是进入这个画面: 4.然后点击"疑难解答" ...
- css滤镜让图片模糊
.mhblur { filter: url(blur.svg#blur); /* FireFox, Chrome, Opera */ -webkit-filter: blur(53px); /* Ch ...
- Vue自定义事件,$on(eventName) 监听事件,$emit(eventName) 触发事件
<!--自定义事件 使用 $on(eventName) 监听事件 使用 $emit(eventName) 触发事件--> <div id="app15"> ...