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之路的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 623 在二叉树中增加一行[BFS DFS] HERODING的LeetCode之路