Gupt
BAN USERtemplate<class T>
void NTree<T>::Preorder(NTreeNode<T>* node)
{
if (!node) return;
cout << node->m_data;
vector<NTreeNode<T>*>::iterator iter;
iter = node->m_listChildren.begin();
for (; it != node->m_listChildren.end() ;it++)
{
Preorder(*it);
}
}
@Dinesh, I dont think so, a node will be visited only once. Anything to support your argument?
- Gupt March 11, 2013_DeepestOddlevelleaf(node, currentlevel, int & deepestoddlevel)
{
if (currentlevel is odd
&& node is a leafnode
&& currentlevel > deepestoddlevel)
{
deepestlevel = currentlevel;
}
if (node->left)
_DeepestOddlevelleaf(node->left, currentlevel+1, deepestoddlevel);
if (node->right)
_DeepestOddlevelleaf(node->right, currentlevel+1, deepestoddlevel);
}
DeepestOddlevelleaf()
{
deepestoddlevel = 0;
if (root != null)
_DeepestOddlevelleaf(root, 1, deepestoddlevel);
return deepestoddlevel;
}
template <class T>
int BinaryTree<T>::DiffBWOddAndEvenLevelSums()
{
int evemsum = 0;
int oddsum = 0;
_DiffBWOddAndEvenLevelSums(m_Root, evemsum, oddsum);
return (evemsum - oddsum);
}
template <class T>
void BinaryTree<T>::_DiffBWOddAndEvenLevelSums(BinaryTreeNode<T>* node, int& sum1, int& sum2)
{
if (node)
{
sum1 += node->m_Data;
_DiffBWOddAndEvenLevelSums(node->m_Left, sum2, sum1);
_DiffBWOddAndEvenLevelSums(node->m_Right, sum2, sum1);
}
}
I think the exact recurrence relation wd be
LexicographicRank(A) = 1 (when A has just 1 char or if A is empty)
otherwise
LexicographicRank(A) = LexicographicRank(A.substring(1)) + rank(A(0), A.Substring(1)) * factorial(lengthofA - 1)
where Rank(char c, String A) = #(unique characters in A < c)
{
const int strlength = 100;
char sourceStr [strlength] = {'\0'};
char destStr [strlength] = {'\0'};
int nStr = 0;
char temp;
bool fRestart = true; // variable to be checked at the end of loop to see whether rerun is required
cout <<"\nEnter source sring: ";
cin >> sourceStr;
cout <<"\nEnter destination sring: ";
cin >> destStr;
nStr = strlen(sourceStr);
cout << "\nString Conversion Process: " << sourceStr;
while (fRestart)
{
fRestart = false;
for (int i = 0; i < nStr; i++)
{
temp = sourceStr[i];
if (sourceStr[i] != destStr[i])
{
sourceStr[i] = destStr[i];
if (false == isValidWord(sourceStr)) // isvalid checks dictionary, if the wor is valid
{
sourceStr[i] = temp;
fRestart = true;
}
else
{
cout << " -> " << sourceStr;
}
}
}
};
}
- Gupt March 12, 2013