小白二叉树
柳岸残雨
小白
展开
-
二叉树17 合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点输入: Tree 1 Tree 2 1 2原创 2021-08-19 16:15:36 · 81 阅读 · 0 评论 -
二叉树16 从中序与后序遍历序列构造二叉树
根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解:和 前序 + 中序 = 后序一样,纸老虎class Solution {public: unordered_map<int, int> ordermap;原创 2021-08-19 15:58:14 · 111 阅读 · 0 评论 -
二叉树15 路径总和 II 冲鸭冲
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22输出:[[5,4,11,2],[5,8,4,5]]解:和上一个题一样,只不过需要都遍历一次,所以回溯函数的返回值就设为void了。回溯回溯,永远滴神class Solution {public:原创 2021-08-19 14:55:11 · 71 阅读 · 0 评论 -
二叉树14 .路径总和 冲鸭冲
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true解:如果需要搜索整颗⼆叉树,那么递归函数就不要返回值,如果要搜索其中⼀条符合条件的路径,递归函数就需要返回值,因为遇到符合条件的路径了就要原创 2021-08-19 10:37:58 · 78 阅读 · 0 评论 -
二叉树11 N 叉树的最大深度 刷刷刷
给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:3解:上个题一毛一样1、迭代“class Solution {public: int maxDepth(Node* root) { if(!root) return 0; queue<Node *&g原创 2021-08-19 10:03:31 · 69 阅读 · 0 评论 -
二叉树13 完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。输入:root = [1,2,3,4,5,6]输出:6、1、迭代,直接数个数class Solution {public: int countNodes(TreeNode* root) { if(!root)原创 2021-08-19 10:03:07 · 444 阅读 · 0 评论 -
二叉树12 二叉树的最小深度 整理
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。输入:root = [3,9,20,null,null,15,7]输出:2解:class Solution {public: int minDepth(TreeNode* root) { if (!root) return 0; int leftdepth = minDepth(root -> left);原创 2021-08-19 10:02:33 · 201 阅读 · 0 评论 -
二叉树11 二叉树的最大深度(迭代、递归) 一会洗个澡去
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3解:1、递归yydsclass Solution {public: int maxDepth(TreeNode* root) { if (root == nullptr) { r原创 2021-08-19 10:01:59 · 107 阅读 · 0 评论 -
二叉树10 对称二叉树(递归 、 迭代)冲
一天最多发10篇,存个草稿明天发给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3解:递归法:得需要一个辅助的函数:class Solution {public: bool isSymmetric(TreeNode* root) { return isbool(root -> left, root -> right); } boo原创 2021-08-19 10:01:33 · 86 阅读 · 0 评论 -
二叉树9 翻转二叉树 (迭代 和 递归) 冲
翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1解:1、没有void的递归,哈哈,我终于写出来了没有void的了,加深理解的第一步class Solution {public: TreeNode* invertTree(TreeNode* root) { if (!root) {翻译 2021-08-19 10:00:51 · 68 阅读 · 0 评论 -
二叉树8 在每个树行中找最大值 感觉今天刷不完了,好多
给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。输入: root = [1,3,2,5,3,null,9]输出: [1,3,9]解释:1/ 3 2/ \ \5 3 9解:注意: int的最小值为INT_MIN最大值为INT_MAXclass Solution {public: vector<int> largestValues(TreeNode* root) { vector<int> result原创 2021-08-18 15:45:15 · 67 阅读 · 0 评论 -
二叉树7 N 叉树的层序遍历 今天得冲完二叉树
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)输入:root = [1,null,3,2,4,null,5,6]输出:[[1],[3,2,4],[5,6]]解:注意子树变成了个数:node -> child.size()每一个子树:node -> child[i]class Solution {public: vector<vector<int>>原创 2021-08-18 15:36:42 · 97 阅读 · 0 评论 -
二叉树6 二叉树的层平均值 冲
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。输入:3/ 9 20/ 15 7输出:[3, 14.5, 11]解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。解:直接在层序遍历的基础上杀class Solution {public: vector<double> averageOfLevels(TreeNode* root) { //vector<d原创 2021-08-18 15:12:49 · 66 阅读 · 0 评论 -
二叉树5 二叉树的右视图 冲
会了层序遍历,感觉这将是一场屠杀,所有层序的题直接在原有的基础上改题目:给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。输入: [1,2,3,null,5,null,4]输出: [1,3,4]解:直接层序遍历,每一层只留最后一个值就好了注释的部分是我一开始写的,其实也行class Solution {public: vector<int> rightSideView(TreeNode* root) {原创 2021-08-18 15:03:09 · 157 阅读 · 0 评论 -
二叉树4 自底向上层序遍历 冲
就是把层序遍历给最后反转一下,okclass Solution {public: vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<int> temp; vector<vector<int>> result; if(!root) return result; queue<TreeNode *&g原创 2021-08-18 14:43:46 · 165 阅读 · 0 评论 -
二叉树3 后序遍历迭代 冲!
前序遍历是:根 左 右把前序遍历后面入栈顺序改一下:根 右 左最后反转一下左 右 根变成后序遍历了!代码:class Solution {public: vector<int> postorderTraversal(TreeNode* root) { vector<int> result; stack<TreeNode*> treeStack; if (!root) {原创 2021-08-18 14:28:19 · 68 阅读 · 0 评论 -
二叉树2 中序遍历(迭代法) 冲
相较于前序遍历,多了一个指针进行维护,指针一直指向左子树,直到为空,才取出栈顶节点(其实就是最左的子节点)。pushback完,再->右子树class Solution {public: vector<int> inorderTraversal(TreeNode* root) { vector<int> result; stack<TreeNode*> treeStack; if (!root) {原创 2021-08-18 14:08:23 · 130 阅读 · 0 评论 -
二叉树1 前序遍历(迭代法) 冲
class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int> result; stack<TreeNode*> treeStack; if (!root) { return {}; } treeStack.push(root); whi原创 2021-08-18 11:00:02 · 61 阅读 · 0 评论