本文整理汇总了C#中TreeNode.Validate方法的典型用法代码示例。如果您正苦于以下问题:C# TreeNode.Validate方法的具体用法?C# TreeNode.Validate怎么用?C# TreeNode.Validate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TreeNode
的用法示例。
在下文中一共展示了TreeNode.Validate方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: UnsafeInsert
// Добавление элемента "не безопасное", так как функция расчитывает на то, что элемент действительно не существует в дереве
// Мне такой реализации будет достаточно.
private static void UnsafeInsert(ref TreeNode treeRoot, int value, TreeNode leftThread = null, TreeNode rightThread = null)
{
// Используется для отладки
if (!treeRoot.Validate())
{
}
if (value > treeRoot.Value)
{
if (IsRightThreaded(treeRoot))
{
TreeNode node = new TreeNode()
{
Left = treeRoot,
Right = treeRoot.Right,
Size = 1,
Value = value
};
treeRoot.Right = node;
treeRoot.Size++; // Допускается увеличивать размер только, если заренее было проверено, что такого элемента не было добавлено
return;
}
else
{
//TreeNode rightNode = treeRoot.Right;
//TreeNode leftNode = treeRoot.Left;
//if (value > rightNode.Value)
//{
// if (!IsRightThreaded(rightNode) && (IsLeftThreaded(treeRoot) || (rightNode.Right.Size + 1) > leftNode.Size))
// LeftRotate(ref treeRoot);
//}
//else if (value < rightNode.Value)
//{
// if (!IsLeftThreaded(rightNode) && (value > rightNode.Left.Value) && (IsLeftThreaded(treeRoot) || (rightNode.Left.Size + 1) > leftNode.Size))
// {
// RightRotate(ref treeRoot.Right);
// LeftRotate(ref treeRoot);
// }
//}
leftThread = treeRoot;
treeRoot.Size++; // Допускается увеличивать размер только, если заренее было проверено, что такого элемента не было добавлено
UnsafeInsert(ref treeRoot.Right, value, leftThread, rightThread);
}
}
else if (value < treeRoot.Value)
{
if (IsLeftThreaded(treeRoot))
{
TreeNode node = new TreeNode()
{
Left = treeRoot.Left,
Right = treeRoot,
Size = 1,
Value = value
};
treeRoot.Left = node;
treeRoot.Size++; // Допускается увеличивать размер только, если заренее было проверено, что такого элемента не было добавлено
return;
}
else
{
//TreeNode rightNode = treeRoot.Right;
//TreeNode leftNode = treeRoot.Left;
//if (value < leftNode.Value)
//{
// if (!IsLeftThreaded(leftNode) && (IsRightThreaded(treeRoot) || (leftNode.Left.Size + 1) > rightNode.Size))
// RightRotate(ref treeRoot);
//}
//else if (value > leftNode.Value)
//{
// if (!IsRightThreaded(leftNode) && (value < leftNode.Right.Value) && (IsRightThreaded(treeRoot) || (leftNode.Right.Size + 1) > rightNode.Size))
// {
// LeftRotate(ref treeRoot.Left);
// RightRotate(ref treeRoot);
// }
//}
rightThread = treeRoot;
treeRoot.Size++; // Допускается увеличивать размер только, если заренее было проверено, что такого элемента не было добавлено
UnsafeInsert(ref treeRoot.Left, value, leftThread, rightThread);
}
}
}