或者你还可以通过缩进的格式来显示一棵树的内容,
随进的格式即孩子结点总比父结点向后缩进显示,即很像已经展开的TreeViewList,
写的递归代码如下:
/////////////////////////////////////////////////////
//PrintTab()私有递归成员函数
//以缩进的格式来显示子树subTree的先根结构
/////////////////////////////////////////////////////
template<class T>
void Tree<T>::PrintTab(TreeNode<T>* subTree,int tab)
{
if(subTree!=NULL)
{
//显示缩进的空格
for(int i=0;i<=tab;i++)
cout<<"----";
//显示当前子树的根结点
cout<<subTree->data<<endl;
//游标指针,从长子结点开始
TreeNode<T>* ptr=subTree->firstChild;
//循环递归PrintTab显示subTree的所有子树
while(ptr!=NULL)
{
PrintTab(ptr,tab+1);
//指向下个兄弟子树
ptr=ptr->nextSibling;
};
};
};
///////////////////////////////////PrintTab()函数结束
当然我觉得以上的代码也可以通过非递归的方式来实现,我想,在非递归遍历
该树的过程中,当前堆栈中元素的个数,可以认为是当前递归的深度,也可以
认为是当前结点应该缩进的空格的个数,这个代码就不给你了,想必你也可以
编写出来,另外只是给你成员函数,没有给你整个完整的类的实现,你可以通
过我的代码里的思想应该可以写出属于自己的代码的,大家共勉!