919. Complete Binary Tree Inserter

LeetCode medium оригинал: C# #csharp #design #leetcode #medium #queue #tree #two-pointers

C# решение

сопоставлено/оригинал
using System.Collections.Generic;
public class TreeNode {
    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int x) { val = x; }
}
public class CBTInserter {
    private TreeNode root;
    private Queue<TreeNode> deque;
    public CBTInserter(TreeNode root) {
        this.root = root;
        this.deque = new Queue<TreeNode>();
        Queue<TreeNode> queue = new Queue<TreeNode>();
        queue.Enqueue(root);
        while (queue.Count > 0) {
            TreeNode node = queue.Dequeue();
            if (node.left == null || node.right == null) {
                deque.Enqueue(node);
            }
            if (node.left != null) {
                queue.Enqueue(node.left);
            }
            if (node.right != null) {
                queue.Enqueue(node.right);
            }
        }
    }
    public int Insert(int v) {
        TreeNode node = deque.Peek();
        TreeNode newNode = new TreeNode(v);
        if (node.left == null) {
            node.left = newNode;
        } else {
            node.right = newNode;
            deque.Dequeue();
        }
        deque.Enqueue(newNode);
        return node.val;
    }
    public TreeNode Get_root() {
        return root;
    }
}

C++ решение

auto-draft, проверить перед отправкой
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
public class TreeNode {
    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int x) { val = x; }
}
public class CBTInserter {
    private TreeNode root;
    private queue<TreeNode> deque;
    public CBTInserter(TreeNode root) {
        this.root = root;
        this.deque = new queue<TreeNode>();
        queue<TreeNode> queue = new queue<TreeNode>();
        queue.Enqueue(root);
        while (queue.size() > 0) {
            TreeNode node = queue.Dequeue();
            if (node.left == null || node.right == null) {
                deque.Enqueue(node);
            }
            if (node.left != null) {
                queue.Enqueue(node.left);
            }
            if (node.right != null) {
                queue.Enqueue(node.right);
            }
        }
    }
    public int Insert(int v) {
        TreeNode node = deque.Peek();
        TreeNode newNode = new TreeNode(v);
        if (node.left == null) {
            node.left = newNode;
        } else {
            node.right = newNode;
            deque.Dequeue();
        }
        deque.Enqueue(newNode);
        return node.val;
    }
    public TreeNode Get_root() {
        return root;
    }
}

Java решение

сопоставлено/оригинал
import java.util.*;

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

class CBTInserter {
    private TreeNode root;
    private Queue<TreeNode> deque;

    public CBTInserter(TreeNode root) {
        this.root = root;
        this.deque = new LinkedList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()) {
            TreeNode node = queue.poll();
            if (node.left == null || node.right == null) {
                deque.add(node);
            }
            if (node.left != null) {
                queue.add(node.left);
            }
            if (node.right != null) {
                queue.add(node.right);
            }
        }
    }

    public int insert(int v) {
        TreeNode node = deque.peek();
        TreeNode newNode = new TreeNode(v);
        if (node.left == null) {
            node.left = newNode;
        } else {
            node.right = newNode;
            deque.poll();
        }
        deque.add(newNode);
        return node.val;
    }

    public TreeNode get_root() {
        return root;
    }
}

JavaScript решение

сопоставлено/оригинал
class TreeNode {
    constructor(val = 0, left = null, right = null) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}

class CBTInserter {
    constructor(root) {
        this.root = root;
        this.deque = [];
        const queue = [root];
        while (queue.length > 0) {
            const node = queue.shift();
            if (!node.left || !node.right) {
                this.deque.push(node);
            }
            if (node.left) {
                queue.push(node.left);
            }
            if (node.right) {
                queue.push(node.right);
            }
        }
    }

    insert(v) {
        const node = this.deque[0];
        const newNode = new TreeNode(v);
        if (!node.left) {
            node.left = newNode;
        } else {
            node.right = newNode;
            this.deque.shift();
        }
        this.deque.push(newNode);
        return node.val;
    }

    get_root() {
        return this.root;
    }
}

Algorithm

Реализуйте класс CBTInserter: CBTInserter(TreeNode root) Инициализирует структуру данных корнем полного бинарного дерева. int insert(int v) Вставляет TreeNode в дерево со значением Node.val == val так, что дерево остается полным, и возвращает значение родителя вставленного TreeNode. TreeNode get_root() Возвращает корневой узел дерева.

Пример:

Input

["CBTInserter", "insert", "insert", "get_root"]

[[[1, 2]], [3], [4], []]

Output

[null, 1, 2, [1, 2, 3, 4]]

👨‍💻

Алгоритм:

Инициализация: Проход по дереву и добавление всех узлов в очередь, чтобы отслеживать узлы, у которых есть хотя бы одно пустое место для нового дочернего узла.

Вставка: Добавление нового узла в первое доступное место слева направо.

Возвращение корня: Просто возвращает корневой узел.

😎

Вакансии для этой задачи

Показаны активные вакансии с пересечением по тегам задачи.

Все вакансии
Активных вакансий пока нет.