C,无复杂代码,无详细注释,自写,请读者视情参考
思想:
我们在求树的深度的时候,一般采用两种方法,一种是递归计算子树的深度,一种是非递归遍历树,取栈顶指针的最远处。
对于第一种方法,其思想是对某一个节点,比较其左子树的深度和右子树的深度,取最长便是当前节点的深度。
那么是否可以利用这个比较的间隙,将左子树的深度和右子树的深度加在一起,得出当前节点的直径呢?如果可以,那么所有节点的直径中取最大值,便是一整棵树的直径了。
所需知识:
C,二叉树,树的深度算法
途径:
在树的深度算法中插入一个计算直径的语句,保存直径的最大值。
举例:
无
#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, last