每次从二叉树根节点走到叶子结点(也有其他的非叶子结点),将遍历过的结点入栈,并判断栈的大小,返回栈中结点最大时候的值
代码实现:
//获得二叉树深度的非递归实现
int TreeDeep(BiTree BT )
{
int treedeep=0;
stack<BiTree> S; //存放树结点
stack<int> tag; //标志,0:树结点入栈,1:从根到叶子(可能非叶子)一条路径,可以计算深度
BiTree p=BT;
while(p!=NULL||!S.empty())
{
while(p!=NULL)
{
S.push(p); //树的结点入栈
tag.push(0);
p=p->leftChild;
}
if(tag.top()==1)
{
treedeep=treedeep>S.size()?treedeep:S.size();
S.pop();
tag.pop();
p=NULL;
}
else
{
p=S.top(); //访问到了树的最底端,置标志,计算树的深度
p=p->rightChild;
tag.pop();
tag.push(1);
}
}
return treedeep;
}
转自:http://www.cnblogs.com/GoAhead/archive/2012/05/22/2513847.html