Сложность: easy
В бинарном дереве одиночный узел — это узел, который является единственным ребёнком своего родительского узла. Корень дерева не является одиночным, так как у него нет родительского узла.
Дано корневое значение бинарного дерева. Верните массив, содержащий значения всех одиночных узлов в дереве. Верните список в любом порядке.
Пример:
Input: root = [7,1,4,6,null,5,3,null,null,null,null,null,2]
Output: [6,2]
Explanation: Light blue nodes are lonely nodes.
Please remember that order doesn't matter, [2,6] is also an acceptable answer.
👨💻 Алгоритм:
1⃣Определите рекурсивную функцию DFS, которая принимает корень дерева, булеву переменную isLonely и список одиночных узлов ans в качестве аргументов. Если корень равен NULL, завершите выполнение функции.
2⃣Если isLonely равен true, добавьте значение корня в список ans. Рекурсивно обрабатывайте левого потомка корня, устанавливая флаг isLonely в true, если правый потомок равен NULL, и правого потомка, устанавливая флаг isLonely в true, если левый потомок равен NULL.
3⃣Вызовите DFS с корнем и false в качестве значения isLonely. Верните ans.
😎 Решение:
using System;
using System.Collections.Generic;
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) {
this.val = val;
this.left = left;
this.right = right;
}
}
public class Solution {
public void DFS(TreeNode root, bool isLonely, List<int> ans) {
if (root == null) {
return;
}
if (isLonely) {
ans.Add(root.val);
}
DFS(root.left, root.right == null, ans);
DFS(root.right, root.left == null, ans);
}
public IList<int> GetLonelyNodes(TreeNode root) {
List<int> ans = new List<int>();
DFS(root, false, ans);
return ans;
}
}
Ставь 👍 и забирай 📚 Базу знаний