题目链接
实现思路
层序遍历获取depth-1行的节点进行处理。
根据题目的第4个规则,当depth==1时,将新建的节点设为根节点,原来的根节点设为左孩子。
随后,进行层序遍历,进行至depth-1行。
对得到的节点分别进行以下操作:
// left
TreeNode *node_l = new TreeNode(val, nullptr, nullptr);
node_l->left = temp->left;
temp->left = node_l;
// right
TreeNode *node_r = new TreeNode(val, nullptr, nullptr);
node_r->right = temp->right;
temp->right = node_r;
实现代码(C++)
class Solution {
public:
TreeNode* addOneRow(TreeNode* root, int val, int depth) {
if (depth == 1) {
TreeNode *node = new TreeNode(val, root, nullptr);
return node;
}
queue<TreeNode*> q;
q.push(root);
for (int cnt = 1; !q.empty() && cnt < depth - 1; cnt++) {
int size = q.size();
for (int i = 0; i < size; i++) {
TreeNode *node = q.front();
q.pop();
if (node->left) {
q.push(node->left);
}
if (node->right) {
q.push(node->right);
}
}
}
int size = q.size();
for (int i = 0; i < size; i++) {
TreeNode* temp = q.front();
q.pop();
TreeNode *node_l = new TreeNode(val, nullptr, nullptr);
node_l->left = temp->left;
temp->left = node_l;
TreeNode *node_r = new TreeNode(val, nullptr, nullptr);
node_r->right = temp->right;
temp->right = node_r;
}
return root;
}
};