二叉树
我不是宸哥
要为真理而斗争
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JZ36 二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示数据范围:输入二叉树的节点数0 \le n \le 10000≤n≤1000,二叉树中每个节点的值0\le val \le 10000≤val≤1000要求:空间复杂度O(1)O(1)(即在原树上操作),时间复杂度O(n)O(n)方法一:中序递归,二叉搜索树的中序遍历正是从大到校排列的顺序,先while循环root->找到要返回的头节点,在全局变量一空节点指针,进行中序遍历,每次将root->left ...原创 2022-04-01 15:04:05 · 397 阅读 · 0 评论 -
JZ34 二叉树中和为某一值的路径(二)
输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值的和为expectNumber的所有路径。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n方法一:递归遍历,从根节点遍历到叶子节点class Solution { vector<vector<int>> ans; vector<int>...原创 2022-03-31 17:58:52 · 121 阅读 · 0 评论 -
JZ33 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。数据范围: 节点数量 0 \le n \le 10000≤n≤1000 ,节点上的值满足 1 \le val \le 10^{5}1≤val≤105 ,保证节点上的值各不相同方法一:递归,分治,class Solution {public: bool VerifySquenceOfBST(vector<int> seque..原创 2022-03-31 14:18:33 · 1202 阅读 · 0 评论 -
JZ32 从上往下打印二叉树
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回方法一:层序遍历二叉树,以前也写过,用一个队列queue来辅助存储节点class Solution {public: vector<int> PrintFromTopToBottom(TreeNode* root) { if(!root){ ...原创 2022-03-30 16:32:55 · 627 阅读 · 0 评论 -
JZ28 对称的二叉树
给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)方法一:递归class Solution {public: bool isduicheng (TreeNode* root1,TreeNode* root2){ if(!root1 && !root2) return true; if(!root1 || !root2) return false; return (root1->val == root2->val)...原创 2022-03-29 15:54:13 · 837 阅读 · 0 评论 -
JZ27 二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像。数据范围:二叉树的节点数0 \le n \le 10000≤n≤1000, 二叉树每个节点的值0\le val \le 10000≤val≤1000要求:空间复杂度O(n)O(n)。本题也有原地操作,即空间复杂度O(1)O(1)的解法,时间复杂度O(n)O(n)方法一:递归,换就完事了class Solution {public: void transfer(TreeNode* pRoot){ TreeN...原创 2022-03-28 15:51:25 · 598 阅读 · 0 评论 -
JZ8 二叉树的下一个结点
描述给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示方法一:暴力解法,中序遍历一遍二叉树,把顺序记录在数组中,然后找到指定节点,返回数组中下一个节点即可(有概率时间通不过class Solution {public: void middle(TreeLinkNode* root,vecto...原创 2022-03-22 09:06:53 · 172 阅读 · 0 评论 -
JZ7 重建二叉树
给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。提示:1.vin.length ==pre.length2.pre 和 vin均无重复元素3.vin出现的元素均出现在pre里4.只需要返回根结点,系统会自动输出整颗树做答案对比数据范围:n \le 2000n≤2000,节点的值-10000 \le val...原创 2022-03-22 08:49:24 · 237 阅读 · 0 评论 -
数据结构每日一题33
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”方法一:递归classSolution{public:TreeNode*ancestor(TreeNode*root,TreeNode*p,TreeNode*q){if(p->val<root->v...原创 2022-03-13 16:45:20 · 100 阅读 · 0 评论 -
数据结构每日一题32
给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。方法一:先层序遍历一遍二叉树,将每个节点的值放入哈希表中,每遍历一个节点,判断当前节点的值是否与哈希表中的某个值相加等于目标值。classSolution{public:boolfindTarget(TreeNode*root,intk){if(root==nullptr){returnfal...原创 2022-03-13 16:21:48 · 963 阅读 · 0 评论 -
数据结构每日一题31
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。方法一:使用递归。使用上界uper,下界lower,递归时将左子树传入递归函数时上界变为根节点的值,将右节点传入递归函数时,下界为根节点的值。classSolution{public:boolisBST(TreeNode*root,longuper,lon...原创 2022-03-13 13:30:59 · 243 阅读 · 0 评论 -
数据结构每日一题30
给定二叉搜索树(BST)的根节点root和要插入树中的值value,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。方法一:classSolution{public:TreeNode*insertIntoBST(TreeNode*root,intval){if(root...原创 2022-03-12 14:06:05 · 174 阅读 · 0 评论 -
数据结构每日一题29
给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。方法一:用中/前/后序遍历一遍树,找到val值相等的root返回即可classSolution{public:TreeNode*ans;TreeNode*searchBST(TreeNode*root,intval){if(root==NULL){...原创 2022-03-12 12:44:23 · 590 阅读 · 0 评论 -
数据结构每日一题28
给你二叉树的根节点root 和一个表示目标和的整数targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。方法一:广度搜索,用队列,每一层将当前节点到根节点的路径和记录下来,当来到叶子节点时,判断是否等于目标和。classSolution{public:boolhasPathSum(TreeNode*root,i...原创 2022-03-11 14:07:09 · 331 阅读 · 0 评论 -
数据结构每日一题27
给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。方法一:递归classSolution{public:TreeNode*invertTree(TreeNode*root){if(root==NULL)returnroot;TreeNode*temp=root->left;root->left=root->right;root->rig...原创 2022-03-11 13:30:37 · 179 阅读 · 0 评论 -
数据结构每日一题26
给你一个二叉树的根节点 root , 检查它是否轴对称。方法一:递归。左节点的值等于右节点的值。class Solution {public:bool checksym(TreeNode* p,TreeNode* q){if(p == NULL && q == NULL) return true;if(!p || !q) return false;return p->val == q->val && checksym(p->lef原创 2022-03-11 11:17:19 · 211 阅读 · 0 评论 -
数据结构每日一题25
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。方法一:递归classSolution{public:intmaxDepth(TreeNode*root){if(root==NULL)return0;returnmax(maxDepth(root->left),maxDepth(root->right))+1;}}...原创 2022-03-11 10:34:20 · 103 阅读 · 0 评论 -
数据结构每日一题24
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。方法一:层序遍历。用队列储存每一层的节点。classSolution{public:vector<vector<int>>levelOrder(TreeNode*root){vector<vector<int>>res;//res二维数组记录每层的值if(root==NULL){...原创 2022-03-11 09:52:14 · 532 阅读 · 0 评论 -
数据结构每日一题23
给你一棵二叉树的根节点root,返回其节点值的后序遍历。方法一:递归classSolution{public:voidback(TreeNode*root,vector<int>&ans){if(root==NULL){return;}back(root->left,ans);back(root->right,ans);ans.push_back(root-...原创 2022-03-11 10:04:24 · 459 阅读 · 0 评论 -
数据结构每日一题22
给定一个二叉树的根节点 root ,返回它的 中序 遍历。方法一:递归 背下来了class Solution {public:void mid(TreeNode* root, vector<int> &ans){if(root == NULL){return;}mid(root->left,ans);ans.push_back(root->val);mid(root->right,ans);}vector<int&g原创 2022-03-10 16:28:35 · 287 阅读 · 0 评论 -
数据结构每日一题21
给你二叉树的根节点root,返回它节点值的前序遍历。方法一:递归 背都背下来了classSolution{public:voidpre(TreeNode*root,vector<int>&ans){if(root==NULL){return;}ans.push_back(root->val);...原创 2022-03-10 16:22:45 · 160 阅读 · 0 评论
分享