일지

알고리즘...63

niamdank 2021. 10. 6. 10:17

B 트리 검색 구현

다진 검색 트리인 B 트리의 검색을 구현한다.

 

BTree::Exists

/// <summary>
/// B 트리를 확인하여 주어진 값이 트리에 존재하는지 여부를 반환한다.
/// </summary>
/// <param name="data">확인할 값</param>
/// <returns>존재 여부</returns>
bool BTree::Exists(int data)
{
	BTreeNode* node{ _root };
	while (node != nullptr)
	{
		for (int i = 0; i < BTreeNode::TotalKeyCount; i++)
		{
			if (node->keys[i].value == data)
			{
				return true;
			}

			if (data < node->keys[i].value)
			{
				node = node->keys[i].left;
				break;
			}

			if (node->keys[i].value < data)
			{
				int nextKeyIdx{ i + 1 };
				if (nextKeyIdx < BTreeNode::TotalKeyCount && node->keys[i + 1].isSet)
				{
					if (data < node->keys[i + 1].value)
					{
						node = node->keys[i].right;
						break;
					}
				}
				else
				{
					node = node->keys[i].right;
					break;
				}
			}
		}
	}
	
	return false;
}