Учитывая двоичное дерево, следующее определяет, является ли оно действительным двоичным деревом поиска (BST).
- Левое поддерево узла содержит только узлы с ключами, меньшими, чем ключ узла.
- Правое поддерево узла содержит только узлы с ключами, которые больше ключа узла.
- И левое, и правое поддеревья также должны быть двоичными деревьями поиска.
Давайтесм. пример ниже:
Если вы видите вышеупомянутое двоичное дерево, это BST.
Теперь давайте рассмотрим другой пример:
Значение корневого узла равно 5, но значение его правого дочернего элемента равно 4, что не удовлетворяет условию, указанному выше.Таким образом, данное дерево не является BST.
Код решения:
Учитывая, что TreeNode определен как
public class TreeNode
{
public int Val { get; set; }
public TreeNode Left { get; set; }
public TreeNode Right { get; set; }
public TreeNode(int x) { this.Val = x; }
}
Код для проверкипроверка
public bool IsValidBST(TreeNode root)
{
return IsValidBST(root, int.MinValue, int.MaxValue);
}
private bool IsValidBST(TreeNode root, int minValue, int maxValue)
{
if (root == null)
{
return true;
}
int nodeValue = root.Val;
if (nodeValue < minValue || nodeValue > maxValue)
{
return false;
}
return IsValidBST(root.Left, minValue, nodeValue - 1) && IsValidBST(root.Right, nodeValue + 1, maxValue);
}
Теперь IsValidBST
можно вызвать с корневым узлом
bool isValidBST = IsValidBST(rootNode);