var addOneRow = function(root, val, depth) {
if (depth === 1) return new TreeNode(val, root)
const q = [root]
let head = 0, tail = 1, d = 0
while (head < tail) {
if (++d === depth) break
for (let l = tail - head; l--;) {
const n = q[head++]
if (n.left) q[tail++] = n.left
if (n.right) q[tail++] = n.right
if (d === depth - 1) {
n.left = new TreeNode(val, n.left)
n.right = new TreeNode(val, null, n.right)
}
}
}
return root
};
function addOneRow(root: TreeNode | null, val: number, depth: number): TreeNode | null {
if (depth === 1) return new TreeNode(val, root)
const q = [root]
let head = 0, tail = 1, d = 0
while (head < tail) {
if (++d === depth) break
for (let l = tail - head; l--;) {
const n = q[head++]
if (n.left) q[tail++] = n.left
if (n.right) q[tail++] = n.right
if (d === depth - 1) {
n.left = new TreeNode(val, n.left)
n.right = new TreeNode(val, null, n.right)
}
}
}
return root
};
class Solution {
function addOneRow($root, $val, $depth) {
if ($depth === 1) return new TreeNode($val, $root);
$q = [$root];
$head = 0;
$tail = 1;
$d = 0;
while ($head < $tail) {
if (++$d === $depth) break;
for ($l = $tail - $head; $l--;) {
$n = $q[$head++];
if ($n->left) $q[$tail++] = $n->left;
if ($n->right) $q[$tail++] = $n->right;
if ($d === $depth - 1) {
$n->left = new TreeNode($val, $n->left);
$n->right = new TreeNode($val, null, $n->right);
}
}
}
return $root;
}
}
广度优先搜索 · 层序遍历 · 遍历到指定深度
func addOneRow(root *TreeNode, val int, depth int) *TreeNode {
if depth == 1 {
return &TreeNode{val, root, nil}
}
q, head := []*TreeNode{root}, 0
for i := 2; i < depth; i++ {
for tail := len(q); head < tail; head++ {
n := q[head]
if n.Left != nil {
q = append(q, n.Left)
}
if n.Right != nil {
q = append(q, n.Right)
}
}
}
for tail := len(q); head < tail; head++ {
q[head].Left = &TreeNode{val, q[head].Left, nil}
q[head].Right = &TreeNode{val, nil, q[head].Right}
}
return root
}
class Solution {
public TreeNode addOneRow(TreeNode root, int val, int depth) {
if (depth == 1) return new TreeNode(val, root, null);
Deque<TreeNode> q = new ArrayDeque<TreeNode>();
q.offerLast(root);
while (depth-- > 2) {
for (int l = q.size(); l > 0; l--) {
TreeNode n = q.pollFirst();
if (n.left != null) q.offerLast(n.left);
if (n.right != null) q.offerLast(n.right);
}
}
while (q.isEmpty() == false) {
TreeNode n = q.pollFirst();
n.left = new TreeNode(val, n.left, null);
n.right = new TreeNode(val, null, n.right);
}
return root;
}
}
public class Solution {
public TreeNode AddOneRow(TreeNode root, int val, int depth) {
if (depth == 1) return new TreeNode(val, root);
Queue<TreeNode> q = new Queue<TreeNode>();
q.Enqueue(root);
while (depth-- > 2) {
for (int l = q.Count; l > 0; l--) {
TreeNode n = q.Dequeue();
if (n.left != null) q.Enqueue(n.left);
if (n.right != null) q.Enqueue(n.right);
}
}
while (q.Count > 0) {
TreeNode n = q.Dequeue();
n.left = new TreeNode(val, n.left);
n.right = new TreeNode(val, null, n.right);
}
return root;
}
}
struct TreeNode* newTreeNode(int val, struct TreeNode* left, struct TreeNode* right) {
struct TreeNode* n = malloc(sizeof(struct TreeNode));
n->val = val;
n->left = left;
n->right = right;
return n;
}
struct TreeNode* addOneRow(struct TreeNode* root, int val, int depth){
if (depth == 1) return newTreeNode(val, root, NULL);
struct TreeNode** q = malloc(sizeof(struct TreeNode*) * 1e4);
q[0] = root;
int head = 0, tail = 1;
while (depth-- > 2) {
for (int l = tail - head; l > 0; l--) {
struct TreeNode* n = q[head++];
if (n->left) q[tail++] = n->left;
if (n->right) q[tail++] = n->right;
}
}
while (head < tail) {
struct TreeNode* n = q[head++];
n->left = newTreeNode(val, n->left, NULL);
n->right = newTreeNode(val, NULL, n->right);
}
return root;
}
class Solution {
public:
TreeNode* addOneRow(TreeNode* root, int val, int depth) {
if (depth == 1) return new TreeNode(val, root, nullptr);
queue<TreeNode*> q;
q.push(root);
while (depth-- > 2) {
for (int l = q.size(); l > 0; l--) {
TreeNode* n = q.front();
q.pop();
if (n->left) q.push(n->left);
if (n->right) q.push(n->right);
}
}
while (q.empty() == false) {
TreeNode* n = q.front();
q.pop();
n->left = new TreeNode(val, n->left, nullptr);
n->right = new TreeNode(val, nullptr, n->right);
}
return root;
}
};
class Solution:
def addOneRow(self, root: Optional[TreeNode], val: int, depth: int) -> Optional[TreeNode]:
if depth == 1: return TreeNode(val, root)
q = [root]
for _ in range(2, depth):
for _ in range(len(q), 0, -1):
n, q = q[0], q[1:]
if n.left: q.append(n.left)
if n.right: q.append(n.right)
for _, n in enumerate(q):
n.left, n.right = TreeNode(val, n.left), TreeNode(val, None, n.right)
return root