ARTES #018
ARTES #018
ARTS é uma atividade iniciada por
由左耳朵耗子--陈皓: Faça pelo menos uma pergunta sobre o algoritmo leetcode toda semana, leia e comente pelo menos um artigo técnico em inglês, aprenda pelo menos uma habilidade técnica e compartilhe um artigo com opiniões e pensamentos. (Ou seja, Algoritmo, Revisão, Dica e Compartilhamento são chamados de ARTS) e persistem por pelo menos um ano.
ARTES 018
Este é o artigo 18
Pergunta sobre algoritmo de algoritmo
107. Traversal de ordem de nível de árvore binária II (Traversal de ordem de nível de árvore binária II)
Dificuldade da pergunta: Fácil
Dada uma árvore binária, retorne um percurso hierárquico de baixo para cima dos valores de seus nós. (Ou seja, atravesse da esquerda para a direita, camada por camada, da camada onde está o nó folha até a camada onde está o nó raiz)
Por exemplo:
Dada uma árvore binária [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
Retorne sua travessia hierárquica de baixo para cima como:
[
[15,7],
[9,20],
[3]
]
Solução
Idioma: C
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *columnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
int** levelOrderBottom(struct TreeNode* root, int** columnSizes, int* returnSize) {
}
/**
- Definição para um nó de árvore binária.
- estrutura TreeNode {
- valor interno;
- struct TreeNode *esquerda;
- struct TreeNode *direita;
- }; / /*
- Retorna um array de arrays de tamanho *returnSize.
- Os tamanhos das matrizes são retornados como matriz *columnSizes.
- Nota: Tanto a matriz retornada quanto a matriz columnSizes devem ser mallocadas, suponha que o chamador chame free(). / int levelOrder(struct TreeNode* root, int** columnSizes, int* returnSize) {
}
Método 1
int getLevelOrderBottom(struct TreeNode* root, int*** ArrayRet, int** columnSizes, int length, int level) {
if (root == NULL) return length;
int size = length;
if (level>size - 1) {
*ArrayRet = realloc(*ArrayRet, sizeof(int*)*(size + 1));
(*ArrayRet)[level]= calloc(0, sizeof(int));
*columnSizes = realloc(*columnSizes, sizeof(int)*(size + 1));
(*columnSizes)[level] = 0;
size++;
}
(*ArrayRet)[level] = realloc((*ArrayRet)[level], sizeof(int)*((*columnSizes)[level] + 1));
(*ArrayRet)[level][(*columnSizes)[level]] = root->val;
(*columnSizes)[level] += 1;
size = getLevelOrderBottom(root->left, ArrayRet, columnSizes, size, level + 1);
size = getLevelOrderBottom(root->right, ArrayRet, columnSizes, size, level + 1);
return size;
}
int** levelOrderBottom(struct TreeNode* root, int** columnSizes, int* returnSize) {
int **ArrayRet = calloc(0, sizeof(int *));
*returnSize = getLevelOrderBottom(root, &ArrayRet, columnSizes, 0, 0);
//reverse the array
int **ret = calloc(*returnSize, sizeof(int *));
for(int i=0;i<*returnSize;i++){
ret[i]=calloc((* columnSizes)[*returnSize-i-1],sizeof(int));
memcpy(ret[i],ArrayRet[*returnSize-i-1],sizeof(int)*(* columnSizes)[*returnSize-i-1]);
}
int k=0,j=* returnSize-1;
while(k<j){
int tmp=(* columnSizes)[k];
(* columnSizes)[k++]=(* columnSizes)[j];
(* columnSizes)[j--]=tmp;
}
return ret;
}
Método 2, do registro de envio do LeetCode:
int GetdepthofTree(struct TreeNode* root){
if (!root) return 0;
int left = GetdepthofTree(root->left);
int right = GetdepthofTree(root->right);
if (left > right)
return left+1;
else
return right+1;
}
int** levelOrderBottom(struct TreeNode* root, int** columnSizes, int* returnSize) {
if (!root){
return NULL;
}
//获取二叉树的深度,最大层数或者说
int depth = *returnSize = GetdepthofTree(root);
//ret是一个指向一个二维数组的指针,这一块地址是我们自己开辟的,需要malloc
int** ret = (int**)malloc(depth*sizeof(int*));
//columnSizes是一个指向指针的指针,这个地址已经指定了,就是说这个地址了存放的下一个地址已经确定了,但是下一个地址里存放的还是地址,这个地址任然不确定,那么就需要malloc了
//*columnSizes是一个指向一个一维数组的指针,数组的大小也是depth
*columnSizes = (int*)malloc(depth*sizeof(int));
int front = 0, back = 0;
struct TreeNode* queue[10000];
queue[back++] = root;
while (front < back){
int start = front, end = back;
(*columnSizes)[--depth] = end - start;
front = end;
//开始的时候我们只给了ret的地址,因为ret是一个二维数组的起始地址,但是这个二维数组里面的一维数组的地址并没有确定,就需要malloc来确定
ret[depth] = (int*)malloc((end - start)*sizeof(int));
for (int i=start; i<end; i++){
ret[depth][i-start] = queue[i]->val;
if (queue[i]->left) queue[back++] = queue[i]->left;
if (queue[i]->right) queue[back++] = queue[i]->right;
}
}
return ret;
}
Revisão
Veja também: Estruturas de dados e algoritmos comuns: https://dandan2009.github.io/2018/11/28/data-structures-part3-language-support/
DICAS
Um guia para iniciantes na codificação de shaders gráficos.
https://gamedevelopment.tutsplus.com/series/a-beginners-guide-to-coding-graphics-shaders--cms-834
Essa série é muito boa. Você pode conferir como um tutorial introdutório sobre Graphics Shaders.
iOS simula método de rede fraca:
- Use um dispositivo real. Existe uma opção em desenvolvimento e uma opção Network Link Conditioner nas configurações do dispositivo real.
Selecione um dos tipos de redes para definir a velocidade da rede

-
Configure o simulador para um ambiente de rede fraco: Método 1: acesse o Apple Developer Center para baixar ferramentas adicionais para Xcode

Abra as Preferências do Sistema, encontre Network Link Conditioner e clique duas vezes para abri-lo.
Os condicionadores de link de rede são eficazes para todo o sistema e a velocidade do acesso normal à Internet também será limitada; portanto, quando o teste for concluído, lembre-se de interromper o condicionador de link de rede.
Método 2: Carlos
Compartilhar
Ferramentas de aprendizagem visual e sites que demarcam diversos algoritmos:
Estruturas de dados e algoritmos da Universidade de São Francisco http://hao.jobbole.com/visualizing-algorithms-and-data-structure/
VisuAlgo: Aprenda algoritmos e estruturas de dados por meio de animação http://hao.jobbole.com/visualgo/
Algomation: uma plataforma de aprendizagem para visualizar, criar e compartilhar algoritmos http://hao.jobbole.com/algomation/
Visualizador de algoritmo: http://algorithm-visualizer.org Algorithm Visualizer tem mais de 10,6 mil estrelas no GitHub: https://github.com/algorithm-visualizer/algorithm-visualizer
Compartilhe um site de aprendizagem de inglês: https://learnamericanenglishonline.com/Red Level/R1 Do.html
What to read next
Want more posts about ARTS?
Posts in the same category are usually the best next step for reading more on this topic.
View same categoryWant to keep following #iOS?
Tags are useful for related tools, specific problems, and similar troubleshooting notes.
View same tagWant to explore another direction?
If you are not sure what to read next, return to the homepage and start from categories, topics, or latest updates.
Back home