C,无复杂代码,无详细注释,自写,请读者视情参考
思想:
利用层次遍历(使用队列),若能记录上一层最后一个节点,那么这一层最后一个节点减去上一层最后一个节点,就是这一层的宽度。
所需知识:
C,二叉树,层次遍历
途径:
设变量last,记录上一层最后一个节点(对第二层来说,上一层最后一个节点就是根节点)。
举例:
对于第三层,last是第二层最后一个节点,当队列的 font 追上 变量last 的时候,说明第二层已经出列完毕,同时也意味着第三层入列完毕,此时队列的 rear 就是第三层最后一个节点,那么rear - last 就是第三层节点数(也就是宽度),再last = rear,记录第三层最后一个节点,直到层次遍历结束。
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
#define ElemType int
#define OK 1
#define ERROR 0
#define MaxNodeCount 50
typedef int Status;
typedef struct BiTreeNode
{
ElemType data;
struct BiTreeNode* lchild;
struct BiTreeNode* rchild;
}BiTreeNode, * Bitree;
Bitree Queue[MaxNodeCount];
int front = 0, rear = 0