二叉树非递归求深度和节点个数

来源:互联网 发布:mysql linux启动 编辑:程序博客网 时间:2024/05/20 07:50
</pre><pre name="code" class="cpp">int num = 1;void levelPrint(NODE *t){int size=1;int deep = 0;NODE * queue[20];int front = -1,rear=0;queue[0] = t;NODE *p = t;while (front != rear){while (size > 0){front++;cout << queue[front]->data << ' ';if (queue[front]->lchild != NULL){queue[++rear] = queue[front]->lchild;num++;}if (queue[front]->rchild != NULL){num++;queue[++rear] = queue[front]->rchild;}size--;}if (size == 0){size = rear - front;//size记录了每一层有几个节点deep++;}}cout << "\n深度: " << deep;cout <<"\n 节点个数: "<< num;}

上述代码是根据按层遍历修改

首先说节点个数:

首先给它赋值为1,是根节点,后面只要说左子节点或右子节点不为空,就给它加上1,这样最后num的值即为二叉树节点的值。

深度:

本身这段代码就是按层遍历,我就想能不能把每一层记录下来呢?首先还是一样,deep为1,表示的是根节点那一层,然后设置一个变量size,来表示每一层的节点个数,

这样的话,然后每查找一个节点,size减一,最后size为0时,说明一层遍历完了,我们给deep加一。整体结束后deep的值即为层数。

0 0
原创粉丝点击