二叉树OJ做题报告

二叉树

  • [力扣LCR 145](#力扣LCR 145)
  • [力扣 226](#力扣 226)
    • [力扣 236](#力扣 236)

力扣LCR 145

判断对称二叉树

学到了:

  • node* p = new node{成员1,成员2};//申请一个node型结构体变量,并初始化成员
  • 二叉树层次插入可以先将数组保存到一个数组里,再根据数组下标递归插入
cpp 复制代码
TreeNode*bulidTree(int i){//i为数组下标
	if(i>n||a[i]==-1){//-1代表为空
		return nullptr;
	}
	TreeNode*node=new TreeNode{a[i],bulidTree(2*i),bulidTree(2*i+1)};
	return node;
}
  • new不需要头文件,malloc需要stdlib.h头文件
  • 无论在什么地方mallocnew,都必须释放,否则会导致内存泄漏
  • 内存分配和释放要配对,如:

int* p = new int; --> delete p;
int* arr = new int[2]; --> delete[] arr;
int* p = (int)malloc(sizeof(int)); -->free(p);

以后要注意:

  • 二叉树递归的出口要明确,不要漏掉了

力扣 226

学到了:

  • 层序遍历

    • 层序遍历是指按层次的顺序 从根结点向下 逐层进行遍历,且对同一层的结点为从左到右遍历
    • 基本思路:
    1. 将根结点 root 加入队列 q。
    2. 取出队首结点,访问它。
    3. 如果该结点有左孩子,将左孩子入队。
    4. 如果该结点有右孩子,将右孩子入队。
    5. 返回第2点,直到队列为空。
cpp 复制代码
queue<TreeNode*> q;	//注意这个队列存的是地址 
	q.push(root);		//根节点地址入队 
	while(!q.empty()){
		TreeNode*node=q.front();//取队首元素 
		q.pop();
		printf("%d ",node->val);//访问队首元素 
		if(node->left) {		//左子树非空
			q.push(node->left); 
		}
		if(node->right) {	   	//右子树非空 
			q.push(node->right);
		}
	}

以后要注意的:

  • 不要用脑子想递归的过程,递归都有返回值,像本题,返回左右孩子,直接交换左右孩子就是答案,不要模拟向下的过程,把递归函数想象成一个黑盒子,返回值就是你要的某个必要的值,直接用这个值计算就行
  • 写递归代码时从下往上想,基本情况处理好了想第二层怎么调用刚刚处理好的基本情况,以此递推

力扣 236

二叉树的最近公共祖先

这题与上面的题差不多,都是基于递归来写的,但是情况比较多,在纸上写好需要应对的情况就好了

学到了:

  • devc++遇到段错误(比如等待一段时间后输出没结果),可以直接点上面的√调试(如需输入的话先输入),它会直接定位到发生段错误的代码行上

以后要注意的:

  • 发生段错误且定位到代码行后,注意分清楚字母和数字(比如"i"和"1"),字母和数字在编程软件上显示是不同的
  • 题目情况多的情况下把所有情况写在纸上,再写代码
相关推荐
py有趣38 分钟前
力扣热门100题之不同路径
算法·leetcode
_日拱一卒1 小时前
LeetCode:25K个一组翻转链表
算法·leetcode·链表
啊哦呃咦唔鱼1 小时前
LeetCodehot100-394 字符串解码
算法
小欣加油1 小时前
leetcode2078 两栋颜色不同且距离最远的房子
数据结构·c++·算法·leetcode·职场和发展
我真不是小鱼1 小时前
cpp刷题打卡记录30——轮转数组 & 螺旋矩阵 & 搜索二维矩阵II
数据结构·c++·算法·leetcode
逻辑驱动的ken3 小时前
Java高频面试考点场景题09
java·开发语言·数据库·算法·oracle·哈希算法·散列表
帅小伙―苏3 小时前
力扣42接雨水
前端·算法·leetcode
AI科技星3 小时前
精细结构常数α的几何本源:从第一性原理的求导证明、量纲分析与全域验证
算法·机器学习·数学建模·数据挖掘·量子计算
6Hzlia3 小时前
【Hot 100 刷题计划】 LeetCode 287. 寻找重复数 | C++ 数组判环 (快慢指针终极解法)
c++·算法·leetcode
MegaDataFlowers3 小时前
26.删除有序数组中的重复项
算法