剑桥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 ...
随机推荐
- fiddler不经意的功能
捕获指定客户端的请求,直接食用 窗口分离,直接食用 Hide this column 隐藏此列Ensure all columns are visible 显示默认所有列Customize co ...
- ant-design学习准备_1
在学习ant-desin过程中,发现很多知识都不清楚,从现在开始,每天将自己学习到的知识进行一个总结记录,前端大佬勿扰勿喷.先介绍几个基础概念和一些常用命令: 1.什么是脚手架 我们经常在各个博客论坛 ...
- Python爬虫使用浏览器的cookies:browsercookie
很多用Python的人可能都写过网络爬虫,自动化获取网络数据确实是一件令人愉悦的事情,而Python很好的帮助我们达到这种愉悦.然而,爬虫经常要碰到各种登录.验证的阻挠,让人灰心丧气(网站:天天碰到各 ...
- 【转】MMORPG游戏服务器技能系统设计:表格字段与技能程序框架
本文主要从一个程序员的角度阐述一下mmorpg服务器技能系统的程序框架设计,最近在做这个,就当做一个总结吧,其中某些概念可能没有解释清楚,欢迎大家拍砖讨论~ 技能其实是战斗系统的一个组成部分,战斗基本 ...
- LeetCode - 463. Island Perimeter - O(MN)- (C++) - 解题报告
原题 原题链接 You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 ...
- crt0.S(_main)代码分析
crt0,S(_main)代码分析 --- 1. 设置sp寄存器地址 //设置SP栈指针 #if defined(CONFIG_SPL_BUILD) && defined(CONFIG ...
- POJ 2653 Pick-up sticks(线段判交)
Description Stan has n sticks of various length. He throws them one at a time on the floor in a rand ...
- 系统常量对话框QT实现
1.运行结果: 2.代码 main.cpp #include "constantdiag.h" #include <QtWidgets/QApplication> in ...
- servlet映射路径
1 访问映射过程 问题:访问URL:http://localhost:8080/day10/first ,服务器如何相应的? 前提: tomcat服务器启动时,首先加载webapps中的每个web应 ...
- 转 【关于api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案】
关于api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案 目录 关于api-ms-win-crt-runtimel1-1-0dll缺失的解决方案 目录 安装VC redite ...