- 2025-01-22二叉树的遍历(深度遍历)
二叉树的遍历分为广度遍历和深度遍历。这里我们讲解一下深度遍历的代码如何书写。首先要明确深度遍历有三种遍历次序,分别是:前序遍历(中左右),中序遍历(左中右),后序遍历(左右中)。如何区别这几种遍历方式呢?关键在于单层递归时处理逻辑的位置,比如说先写处理逻辑,再写左递归和右递归
- 2025-01-22二叉树的层次遍历(广度优先)
所谓层次遍历,就是按层次从左往右遍历二叉树。但是一个节点的左子树和右子树之间是没有直接联系方式的。换句话说,当我们遍历了一个节点的左子树的根节点后,无法直接遍历该节点的右子树的根节点。这里我们可以借助一个数据结构,先按一定顺序将节点存放起来,再从该数据结构取出数据,最
- 2025-01-22翻转二叉树(力扣226)
写这道题之前需要熟悉二叉树的遍历,可以看我的这两篇文章:二叉树的遍历(深度遍历)-CSDN博客,二叉树的层次遍历(广度优先)-CSDN博客所谓翻转二叉树,就是将每一个节点的左孩子和右孩子交换(注意这里指的是指针交换,而不是交换节点的数值)。无非就是在遍历二叉树的基础上调用一下swap
- 2025-01-21Java复习第四天
一、代码题1.相同的树(1)题目给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:输入:p=[1,2,3],q=[1,2,3]输出:true示例2:输入:p=[1,2],q=[1,null,2]输出:false示例3:输入:p=
- 2025-01-19代码随想录:二叉搜索时的插入
/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr),right(nullptr){}*
- 2025-01-19代码随想录:将有序数组转化为二叉搜索树
/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr),right(nullptr){}*
- 2025-01-19代码随想录:修剪二叉搜索树
/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr),right(nullptr){}*
- 2025-01-19代码随想录:删除二叉搜索树中的节点
由于涉及到树的结构变化,用递归写比较简单,竟然一次跑通了/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(int
- 2025-01-19代码随想录:把二叉搜索树转化为累加树
相当于将数组从右到左遍历,下一个数加上一个数,二叉搜索树中序遍历(左中右)为顺序,右中左则为倒叙/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),rig
- 2025-01-19【9.1】树结构-从先序遍历还原二叉树
一、题目 我们从二叉树的根节点root 开始进行深度优先搜索。 在遍历中的每个节点处,我们输出 D 条短划线(其中 D 是该节点的深度),然后输出该节点的值。(如果节点的深度为D,则其直接子节点的深度为D+1。根节点的深度为0)。
- 2025-01-18代码随想录:二叉树的公共祖先
这道题是真巧妙,巧妙有两点不用区分两个目标节点,只要命中了,就往上代码可以处理一个节点本来就是另一个节点祖先的情况/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode(int
- 2025-01-17【二叉树】已知前序中序、中序后序遍历构造二叉树
105.从前序与中序遍历序列构造二叉树-力扣(LeetCode)/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx
- 2025-01-17编程题-最小高度树
题目:给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。解法一(二分查找+二叉搜索树构建):二叉搜索树的中序遍历是升序序列,题目给定的数组是按照升序排列的有序数组,因此可以确保数组是二叉搜索树的中序遍历序列。二叉搜索树中,左子树的
- 2025-01-16代码随想录:二叉搜索树的最小绝对值
遍历二叉搜索树,定义一个全局的上一个节点确实好用/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):
- 2025-01-16代码随想录:验证二叉搜索树
二叉搜索树的中序遍历结果是一个递增的数组为了省空间可以用一个变量记录上一次的数字我一开始设置上一次的为null,结果c++中int为null时实际为0,所以要用最小值/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*
- 2025-01-14代码随想录:验证二叉搜索树
二叉搜索树的中序遍历结果是一个递增的数组为了省空间可以用一个变量记录上一次的数字我一开始设置上一次的为null,结果c++中int为null时实际为0,所以要用最小值/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*
- 2025-01-13代码随想录:最大二叉树
白送/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr),right(nullptr){}
- 2025-01-13代码随想录:从中序与后序遍历序列构造二叉树
/**Definitionforabinarytreenode.structTreeNode{intval;TreeNode*left;TreeNode*right;TreeNode():val(0),left(nullptr),right(nullptr){}TreeNode(intx):val(x),left(nullptr),right(nullptr){}TreeNode(intx,TreeNo
- 2025-01-12代码随想录:完全二叉树的节点个数
拿到一个节点,先判断是不是等边三角形,若是直接返回2^n-1,位运算写在专题中/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*
- 2025-01-12代码随想录:路径总和
代码随想录:路径总和思路很简单,但是一个传参很巧妙,每次递归减去当前节点的值,就只用一个传参/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),righ
- 2025-01-12代码随想录:找树左下角的值
代码随想录:找树左下角的值层次遍历轻轻松松/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x
- 2025-01-12代码随想录:左叶子之和
代码随想录:左叶子之和没啥意思,很铸币的判断方法/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):v
- 2025-01-12数据结构与算法之二叉树: LeetCode 108. 将有序数组转换为二叉搜索树 (Ts版)
将有序数组转换为二叉搜索树https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/描述给你一个整数数组nums,其中元素已经按升序排列请你将其转换为一棵平衡二叉搜索树示例1输入:nums=[-10,-3,0,5,9]输出:[0,-3,9,-10,nul
- 2025-01-12数据结构与算法之二叉树: LeetCode 110. 平衡二叉树 (Ts版)
平衡二叉树https://leetcode.cn/problems/balanced-binary-tree/description/描述给定一个二叉树,判断它是否是平衡二叉树示例1输入:root=[3,9,20,null,null,15,7]输出:true示例2输入:root=[1,2,2,3,3,null,null,4,4]输出:false示例3输入:root=[]输
- 2025-01-12【Java】二叉树:数据海洋中灯塔式结构探秘
二叉树(BinaryTree)是一种基础且重要的树形数据结构,它是数据存储和操作的基础,广泛应用于各种场景,如数据库索引、图像处理、解析表达式等。在各种树形数据结构中,二叉树就像一座灯塔,引导我们在复杂的数据海洋中高效地进行数据处理。在本篇文章中,我们将深入探讨二叉树的基本