[英]How to find the height of a binary tree without using recursion and level order traversal?
我想出了遍历遍历的方法来找到树的高度。
void preHeight(node * n)
{
int max = 0,c = 0;
while(1)
{
while(n)
{
push(n);
c++;
if(c>max)
max = c;
n= n->left;
}
if (isStackEmpty())
return max;
n = pop();
if(n->right) //Problem point
c--;
n=n->right;
}
}
我得到的高度正确,但是我不确定我的方法是否正确。 我要做的是将计数器c
递增到最左边的节点,然后,如果我向上移动,我将其减小,以防万一我需要向右移动,然后重复整个练习。 那是对的吗?
考虑下面的树-
o
/ \
o o
/ \
o o
您将以c == 2到达最左边分支的末尾,然后向上弹出节点,但对于具有右子节点的节点仅减少c
,实际上,您应该在每次弹出时都将其减少,因为这意味着您去了a升级,无论其他孩子如何。 在这种情况下,您将到达顶部节点,递减一次,然后以c == 1从根开始下降,最终达到3。
如果您删除该条件,它将正常工作。 或者,您可以保留每个级别的c
值,而不用递减的方式恢复它-您可以将其压入节点指针旁边的单独堆栈中,也可以使用c
(以及当前值)将代码转换为递归节点)作为局部变量(基本上是同一回事,只是编译器会为您维护堆栈)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.