623. 在二叉树中增加一行

Posted Debroon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了623. 在二叉树中增加一行相关的知识,希望对你有一定的参考价值。

623. 在二叉树中增加一行

 


题目

传送门:https://leetcode.cn/problems/add-one-row-to-tree/

 


算法设计:深度优先搜索

遍历到对应行,进行插入即可。

class Solution 
    int targetVal, targetDepth, curDepth;
public:
    TreeNode* addOneRow(TreeNode* root, int v, int d) 
        targetVal = v;
        targetDepth = d;
        // 插入到第一行的话特殊对待一下
        if (targetDepth == 1) 
            TreeNode* newRoot = new TreeNode(targetVal);
            newRoot->left = root;
            return newRoot;
        
        // 遍历二叉树,走到对应行进行插入
        traverse(root);
        return root;
    

    void traverse(TreeNode* root) 
        if (root == nullptr) 
            return;
        // 前序位置
        curDepth++;
        if (curDepth == targetDepth - 1) 
            // 进行插入
            TreeNode* newLeft = new TreeNode(targetVal);
            TreeNode* newRight = new TreeNode(targetVal);
            newLeft->left = root->left;
            newRight->right = root->right;
            root->left = newLeft;
            root->right = newRight;
        

        traverse(root->left);
        traverse(root->right);

        // 后序位置
        curDepth--;
    
;

简化一下:

class Solution 
public:
    TreeNode* addOneRow(TreeNode* root, int v, int d) 
        if (d == 0 || d == 1)     // 插入到第0、1行时,特别处理
            TreeNode* newroot = new TreeNode(v);
            (d ? newroot->left : newroot->right) = root;
            return newroot;
        
        if (root) 
            root->left  = addOneRow(root->left,  v, d > 2 ? d - 1 : 1);
            root->right = addOneRow(root->right, v, d > 2 ? d - 1 : 0);
        
        return root;
    
;

以上是关于623. 在二叉树中增加一行的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 623.在二叉树中增加一行

Leetcode 623 在二叉树中增加一行 BFS与DFS

LeetCode 623 在二叉树中增加一行[BFS DFS] HERODING的LeetCode之路

每日一题623. 在二叉树中增加一行

LeetCode 0623.在二叉树中增加一行:DFS / BFS

LeetCode八月每日一题题解(个人记录打卡)