力扣94题,及相对应的指针知识

简介: 力扣94题,及相对应的指针知识


   简单一道题,卡了有些天,发现是有些忘记了的指针知识,特意回顾一手,假如是有

int a 这个整形,要想在函数中改变他则需要,往函数里传a的地址,这个我是知道的,但是我忘记了,在递归函数中要改变a实际上传i就行,那么二级指针也是相同的意思,如果是要改变指针i那么是需要传i的地址。

#include"stdio.h"
void zhongxu(int*i){
  (*i)++;
    printf("%d\n", *i);
}
int main () {
        int a=1;
     zhongxu(&a);
    printf("%d",a);
return 0;
}
输出的两个都是2

首先本题有个潜在的难点就是如果要具体的算树节点,来具体的申请内存,就要用到这个函数

int size(struct TreeNode*root){
return root==NULL?0:size(root->left)+size(root->right)+1
}

如果root为空,就返回0,否则就计算总共的节点从左树开始递归。

void zhongxu(struct TreeNode*root,int*a,int *i){
    if(root==NULL)
    return;
      zhongxu(root->left,a,i);
      a[*i]=root->val;
      (*i)++;
      zhongxu(root->right,a,i);
}
int* inorderTraversal(struct TreeNode* root, int* returnSize){
        int i=0;
        int*a=malloc(sizeof(int)*101);
         zhongxu(root,a,&i);
         *returnSize=i;
        return a;
}

输出的时候,多个数字,但是函数只能返回一个值,所以需要返回数组。开始往数组里面存树里面的值,然后让i++赋给下一个值

返回数组也是返回他的首地址,returnSize是要取出数组有多少个,从而取出完整的数组。

然后一个注意点 *p++  

是先++后*,也就相当于*(p++)假如数组是{1,3,5,7,9)

p就会变成3,也就是下一个元素。但是输出时printf("%d", *p++); 输出会输出1

(*p)++。  先*再+1,所以p会变成2,同时他的printf("%d",(*p)++);输出也是输出1


相关文章
|
6月前
|
算法
LeetCode刷题---21.合并两个有序链表(双指针)
LeetCode刷题---21.合并两个有序链表(双指针)
|
6月前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
3月前
|
Python
【Leetcode刷题Python】138. 复制带随机指针的链表
LeetCode上题目“138. 复制带随机指针的链表”的Python解决方案,包括两种方法:一种是在每个节点后复制一个新节点然后再分离出来形成新链表;另一种是构建一个字典来跟踪原始节点与其副本之间的映射关系,从而处理新链表的构建。
20 1
|
5月前
|
索引
力扣每日一题 6/17 枚举+双指针
力扣每日一题 6/17 枚举+双指针
28 1
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
|
5月前
|
算法 容器
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
|
5月前
|
存储 SQL 算法
LeetCode 题目 117:填充每个节点的下一个右侧节点指针 II
LeetCode 题目 117:填充每个节点的下一个右侧节点指针 II
|
5月前
|
存储 SQL 算法
LeetCode 题目 116:填充每个节点的下一个右侧节点指针
LeetCode 题目 116:填充每个节点的下一个右侧节点指针
|
5月前
|
存储 算法 数据挖掘
LeetCode 题目 88:双指针\直接\递归\插入排序\归并排序 实现合并两个有序数组
LeetCode 题目 88:双指针\直接\递归\插入排序\归并排序 实现合并两个有序数组