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

Posted HERODING23

tags:

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


解题思路:
首先是BFS的思路,将root放入队列中,逐层遍历,当下一层就是目标层时,取出当前层的所有元素,并加上新的左右节点,同时与下一层相连,代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode 
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) 
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) 
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) 
 * ;
 */
class Solution 
public:
    TreeNode* addOneRow(TreeNode* root, int val, int depth) 
        if(depth == 1) 
            TreeNode *node = new TreeNode(val);
            node->left = root;
            return node;
        
        queue<TreeNode*> q;
        q.emplace(root);
        int cur = 1;
        while(!q.empty()) 
            int n = q.size();
            for(int i = 0; i < n; i ++) 
                TreeNode* temp = q.front();
                if(cur + 1== depth) 
                    TreeNode* l = new TreeNode(val);
                    TreeNode* r = new TreeNode(val);
                    l->left = temp->left;
                    r->right = temp->right;
                    temp->left = l;
                    temp->right = r;
                 else 
                    if(temp->left != nullptr) 
                        q.emplace(temp->left);
                    
                    if(temp->right != nullptr) 
                        q.emplace(temp->right);
                    
                
                q.pop();
            
            if(cur + 1 == depth) 
                break;
            
            cur ++;
        
        return root;
    
;

BFS的思路实现起来略显繁琐,相比之下,DFS就简洁的多,但是理解稍微有些困难,对于每次处理情况,只在于当左右两节点,如果满足深度,那么就创建新节点,然后连接左节点或者右节点,是左是右可以借助深度来判断,深度为1则左,0位右,这样可以减少大量不必要操作,代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode 
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) 
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) 
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) 
 * ;
 */
class Solution 
public:
    TreeNode* addOneRow(TreeNode* root, int val, int depth) 
        if(depth == 0 || depth == 1) 
            TreeNode* node = new TreeNode(val);
            if(depth == 1) node->left = root;
            else node->right = root;
            return node;
        
        if(root != nullptr && depth > 1) 
            root->left = addOneRow(root->left, val, depth > 2 ? depth - 1 : 1);
            root->right = addOneRow(root->right, val, depth > 2 ? depth - 1 : 0);
        
        return root;
    
;

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

623. 在二叉树中增加一行

623. 在二叉树中增加一行

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

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

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

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