static int recursive_count(BSTreeNode* root) // O(n) { int ret = 0; if( root != NULL ) { ret = recursive_count(root->left) + 1 + recursive_count(root->right); } return ret; }
PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: assert_size() const { _GLIBCXX_DEBUG_ASSERT(recursive_count(m_p_head->m_p_parent) == m_size); }
static __int64 recursive_count(int len, int from = 0, color last_color = uninit) { __int64 result = 0; if(len < 0) return 0; if(len == 0) return 1; for(int block_len = 1; block_len <= len; ++block_len) { if(last_color != black) result += recursive_count(len - block_len, block_len + from, black); // at least one black block. if(last_color != red) result += recursive_count(len - block_len - 2, block_len + from + 2, red); // at least three red blocks. } return result; }
PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: assert_size(const char* __file, int __line) const { PB_DS_DEBUG_VERIFY(recursive_count(m_p_head->m_p_parent) == m_size); }