Merge pull request #2543 from QinHaoting/master

0104二叉树的最大深度 C语言迭代法(后序遍历) && 0055右旋字符串 C语言
This commit is contained in:
程序员Carl
2024-05-29 11:10:13 +08:00
committed by GitHub
2 changed files with 77 additions and 1 deletions

View File

@ -829,7 +829,42 @@ int maxDepth(struct TreeNode* root){
return depth;
}
```
二叉树最大深度迭代——后序遍历实现
```c
int maxDepth(struct TreeNode *root)
{
if(root == NULL)
return 0;
struct TreeNode *stack[10000] = {};
int top = -1;
struct TreeNode *p = root, *r = NULL; // r指向上一个被访问的结点
int depth = 0, maxDepth = -1;
while(p != NULL || top >= 0)
{
if(p != NULL)
{
stack[++top] = p;
depth++;
p = p->left;
}
else
{
p = stack[top];
if(p->right != NULL && p->right != r) // 右子树未被访问
p = p->right;
else
{
if(depth >= maxDepth) maxDepth = depth;
p = stack[top--];
depth--;
r = p;
p = NULL;
}
}
}
return maxDepth;
}
```
### Swift:
104.二叉树的最大深度

View File

@ -253,6 +253,47 @@ func main(){
```
### C
```C
#include <stdio.h>
#include <string.h>
void reverse(char *s, int left, int right)
{
while(left <= right)
{
char c = s[left];
s[left] = s[right];
s[right] = c;
left++;
right--;
}
}
void rightRotate(char *s, int k)
{
int len = strlen(s);
// 先局部反转再整体反转
reverse(s, 0, len - k - 1); // 反转前部分
reverse(s, len - k, len - 1); // 反转后部分后k位
reverse(s, 0, len - 1); // 整体反转
}
int main()
{
int k;
scanf("%d", &k);
char s[10000];
scanf("%s", s);
rightRotate(s, k);
printf("%s\n", s);
return 0;
}
```
### JavaScript