7、有效括号(20栈)

cpp
bool isValid(char* s)
{
int len = strlen(s);
if(len%2 != 0)return false;
else if(len == 0)return false;
int pStack = 0;
char* Stack = (char *)malloc(sizeof(*s)*(len+1));
for(int i=0; i<len; i++)
{
if(s[i] == '(')
{
Stack[pStack] = ')';
pStack++;
}
else if(s[i] == '[')
{
Stack[pStack] = ']';
pStack++;
}
else if(s[i] == '{')
{
Stack[pStack] = '}';
pStack++;
}
else
{
if(pStack == 0)return false;
else if(Stack[pStack-1] == s[i])
{
pStack--;
}
else return false;
}
}
if(pStack == 0)return true;
else return false;
}
8、二叉树的中序遍历(94二叉树递归)

cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
void getnum(struct TreeNode* root,int *pNum,int *num)
{
if (root == NULL) {
return;
}
getnum(root -> left,pNum,num);
num[(*pNum) ++] =root -> val;
getnum(root -> right,pNum,num);
}
int* inorderTraversal(struct TreeNode* root, int* returnSize) {
int pNum = 0;
int *num = (int *)malloc(sizeof(int)*100);
getnum(root,&pNum,num);
*returnSize = pNum;
return num;
}
9、二叉树最大深度(104二叉树遍历)

cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int get_deep(struct TreeNode* root)
{
int deep = 0;
if(root == NULL)return 0;
else deep++;
int Left_deep = get_deep(root -> left);
int Right_deep = get_deep(root -> right);
return Left_deep>Right_deep?Left_deep+deep:Right_deep+deep;
}
int maxDepth(struct TreeNode* root) {
return get_deep(root);
}
10、翻转二叉树(226二叉树递归)

cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
void invert(struct TreeNode* root)
{
if(root == NULL)return;
struct TreeNode* rootleft = root -> left;
struct TreeNode* rootlright = root -> right;
root -> left = rootlright;
root -> right = rootleft;
invert(root -> left);
invert(root -> right);
}
struct TreeNode* invertTree(struct TreeNode* root)
{
invert(root);
return root;
}
11.对称二叉树(101遍历二叉树)

cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isdydy(struct TreeNode* rootr,struct TreeNode* rootl)
{
bool r = false;
bool l = false;
if(rootr == NULL && rootl == NULL)return true;
if(rootr == NULL || rootl == NULL)return false;
if(rootr->val == rootl->val)
{
r = isdydy(rootr->left,rootl->right);
l = isdydy(rootr->right,rootl->left);
}
return r&&l;
}
bool isSymmetric(struct TreeNode* root)
{
if(root == NULL) return false;
return isdydy(root -> left,root -> right);
}
12、无重复字符的最长子串(3双指针字符串滑动窗口)

cpp
int lengthOfLongestSubstring(char* s)
{
int pPre = 0;//左
int pBac = 0;//右
int clong = 1;
int len = strlen(s);
if(len<=0)return 0;
int Hashmap[128];
memset(Hashmap,-1,sizeof(Hashmap));
for(int i = 0; i < len; i ++)
{
if(Hashmap[(int)s[i]] < pPre)
{
Hashmap[(int)s[i]] = i;
if (i > pBac)
{
pBac++;
clong = pBac-pPre+1;
}
}
else
{
pPre = Hashmap[(int)s[i]]+1;
Hashmap[(int)s[i]] = i;
pBac = pPre + clong - 1;
}
}
return clong;
}