Сложность: medium
Даны два бинарных дерева поиска root1 и root2. Вернуть список, содержащий все целые числа из обоих деревьев, отсортированные в порядке возрастания.
Пример:
Input: root1 = [2,1,4], root2 = [1,0,3]
Output: [0,1,1,2,3,4]
👨💻 Алгоритм:
1⃣Выполните итеративный обход в порядке возрастания обоих деревьев параллельно.
2⃣На каждом шаге добавляйте наименьшее доступное значение в выходной список.
3⃣Верните выходной список.
😎 Решение:
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int x) { val = x; }
}
public class Solution {
public IList<int> GetAllElements(TreeNode root1, TreeNode root2) {
var stack1 = new Stack<TreeNode>();
var stack2 = new Stack<TreeNode>();
var output = new List<int>();
while (root1 != null || root2 != null || stack1.Count > 0 || stack2.Count > 0) {
while (root1 != null) {
stack1.Push(root1);
root1 = root1.left;
}
while (root2 != null) {
stack2.Push(root2);
root2 = root2.left;
}
if (stack2.Count == 0 || (stack1.Count > 0 && stack1.Peek().val <= stack2.Peek().val)) {
root1 = stack1.Pop();
output.Add(root1.val);
root1 = root1.right;
} else {
root2 = stack2.Pop();
output.Add(root2.val);
root2 = root2.right;
}
}
return output;
}
}Ставь 👍 и забирай 📚 Базу знаний