二叉树的遍历方法主要有前序遍历(VLR),中序遍历(LVR),后序遍历(LRV)。递归的遍历方式主要是访问函数的位置,比较简单,不过也可以用非递归的方式进行遍历。(参考了殷人昆《数据结构第二版》清华大学出版社)
利用栈的前序遍历递归算法:(主要是记录下当前节点的右子树)
template<class T>
void BinTree<T>::PreOrder()
{
stack<BinTreeNode<T>*>s;
BinTreeNode<T> *subTree=root;
s.push(NULL);
while(subTree != NULL)
{
cout << subTree->data << " ";
if (subTree->rChild)
s.push(subTree->rChild);
if (subTree->lChild)
subTree = subTree->lChild;
else if (!s.empty())
{
subTree = s.top();
s.pop();
}
}
cout << endl;
}
二叉树后序遍历可以计算二叉树节点的个数和二叉树的高度:
节点个数:
template<class T>
int BinTree<T>::Size(BinTreeNode&