protected function traverseTree($path)
    {
        // before the travel current node is the root
        $currentNode = $this->tree;

        $pathElements = explode(static::KEY_NODE_DELIMITER, $path);
        foreach($pathElements as $node)
        {
            // Ensure the next child exists
            if(!isset($currentNode[$node]))
            {
                throw new MissingKeyException("{$path} configuration value is not found");
            }

            //update the current path if the child existed
            $currentNode = $currentNode[$node];
        }

        return $currentNode;
    }