首页 > 其他分享 >623 在二叉树中增加一行

623 在二叉树中增加一行

时间:2024-02-12 21:22:38浏览次数:20  
标签:623 node right TreeNode val nullptr 一行 二叉树 root


深度遍历,就是遍历:
1.先要确定有几种情况,像这道题,深度为1,2就是最基本的情况,分为两种处理;
2.根据不同情况,进行不同处理,不需要考虑后面递归的传递。
3.确认传递的方式,如果函数返回的是指针,就需要left,right接住。
完整代码:

点击查看代码
class Solution {
public:
    TreeNode* addOneRow(TreeNode* root, int val, int depth) {
        if (root == nullptr) {
            return nullptr;
        }
        if (depth == 1) {
            return new TreeNode(val, root, nullptr);
        }
        if (depth == 2) {
            root->left = new TreeNode(val, root->left, nullptr);
            root->right = new TreeNode(val, nullptr, root->right);
        } else {
            root->left = addOneRow(root->left, val, depth - 1);
            root->right = addOneRow(root->right, val, depth - 1);
        }
        return root;
    }
};

广度遍历,就可以针对某一层进行处理: leetcode中提到了两个重要函数,emplace_back,move; emplace_back 是 std::vector 类的一个成员函数,它用于在向量的末尾直接构造和插入一个新元素。这个方法通常比 push_back 更高效,特别是在插入的对象是非基本数据类型(如自定义类或结构体)时。 move 本身不移动任何东西。它只是将左值转换为右值引用,使得对象可以作为移动来源。相当于换个名字。 完整代码:
点击查看代码
class Solution {
public:
    TreeNode* addOneRow(TreeNode* root, int val, int depth) {
        if (depth == 1) {
            return new TreeNode(val, root, nullptr);
        }
        vector<TreeNode *> curLevel(1, root);
        for (int i = 1; i < depth - 1; i++) {
            vector<TreeNode *> tmpt;
            for (auto &node : curLevel) {
                if (node->left != nullptr) {
                    tmpt.emplace_back(node->left);
                }
                if (node->right != nullptr) {
                    tmpt.emplace_back(node->right);
                }
            }
            curLevel = move(tmpt);
        }
        for (auto &node : curLevel) {
            node->left = new TreeNode(val, node->left, nullptr);
            node->right = new TreeNode(val, nullptr, node->right);
        }
        return root;
    }
};


标签:623,node,right,TreeNode,val,nullptr,一行,二叉树,root
From: https://www.cnblogs.com/yun-che/p/18014148

相关文章

  • 力扣递归 深度优先搜索 之 104. 二叉树的最大深度
    给定一个二叉树root,返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。 示例1: 输入:root=[3,9,20,null,null,15,7]输出:3示例2:输入:root=[1,null,2]输出:2/** *Definitionforabinarytreenode. *publicclassTre......
  • 力扣 145. 二叉树的后序遍历 递归 迭代
    递归/** *Definitionforabinarytreenode. *publicclassTreeNode{ *  intval; *  TreeNodeleft; *  TreeNoderight; *  TreeNode(){} *  TreeNode(intval){this.val=val;} *  TreeNode(intval,TreeNodelef......
  • 力扣 144. 二叉树的前序遍历 递归 迭代
    递归/** *Definitionforabinarytreenode. *publicclassTreeNode{ *  intval; *  TreeNodeleft; *  TreeNoderight; *  TreeNode(){} *  TreeNode(intval){this.val=val;} *  TreeNode(intval,TreeNodelef......
  • 力扣94. 二叉树的中序遍历 递归&迭代
    给定一个二叉树的根节点root,返回它的中序 遍历。 示例1:输入:root=[1,null,2,3]输出:[1,3,2]示例2:输入:root=[]输出:[]示例3:输入:root=[1]输出:[1] 递归/** *Definitionforabinarytreenode. *publicclassTreeNode{ *  intval;......
  • 代码随想录算法训练营第十六天| 104.二叉树的最大深度 559.n叉树的最大深度 111.二
    104.二叉树的最大深度  题目链接:104.二叉树的最大深度-力扣(LeetCode)n叉树也一样思路:我的普通递归方法classSolution{public:intdepth(TreeNode*node,intd){intl=0,r=0;if(node->left==NULL&&node->right==NULL)returnd;if(node-......
  • (16/60)二叉树最大深度、最小深度、完全二叉树结点个数
    终于熬到了春节假~~有些手感了深度与高度深度是从根结点到叶结点的距离;高度是从叶结点到根结点的距离。深度从上往下(根为1);高度从下往上(叶为1)。二叉树最大深度leetcode:104.二叉树的最大深度后序递归法思路复杂度分析时间复杂度:O(N)。遍历了一遍。空间复杂度:和层数有关......
  • 005_二叉树
    1.用递归和非递归的方式实现二叉树的先序、中序、后序遍历先序遍历递归publicvoidpreOrderRecur(TreeNoderoot){if(root==null){return;}System.out.println(root.val+"");preOrderRecur(root.left);preOrderRecur(root.right);}......
  • (15/60)层序遍历、翻转二叉树、对称二叉树
    层序遍历leetcode:102.二叉树的层序遍历107.二叉树的层序遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧节点指针104.二叉树的最大深度111.二叉树的最小深度102.二叉树的层序遍......
  • 代码随想录算法训练营第十五天| 层序遍历 10 226.翻转二叉树 101.对称二叉树 2
    层序遍历  102.二叉树的层序遍历-力扣(LeetCode)思路:结合了昨天学到的标记法,每当一层遍历完,向队列中添加一个NULL标记。遍历到NULL节点表示该层遍历完了,将结果存入结果集中。/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNo......
  • P2585 [ZJOI2006] 三色二叉树
    原题链接总结1.要学会动态规划这种思维方式,即定义状态和状态之间的转移2.本题的难点在于如何将抽象的输入数据转换成树状结构处理和定义状态,这个定义状态让我想到了初中添加几何线,可能要多做题才能有感觉吧3.有一定模拟的部分,这一部分要细心\(Code\)#include<bits/stdc++.h>......