为了避免使用递归,这里利用栈来遍历二叉树,以中序遍历为例
void TranverseIn(NODE root)
{
stack<NODE> S;
S.push(root);
while(!S.empty())
{
NODE CurrentNode = S.top();
S.pop();
DoSomethin(CurrentNode);
//若当前节点不是叶节点,则将孩子节点放入栈中
if(CurrentNode->rchild) //huffman 编码树必然同时有左右孩子
S.push(CurrentNode -> rchild);
if(CurrentNode->lchild)
S.push(CurrentNode -> lchild);
else//叶子节点
DoSomethingToLeaf(CurrentNode);
}
}