1.问题定义
如果我们把二叉树看成一个图,父子结点之间的连线看成是双向的,我们姑且定义“距离”为两节点之间边的个数。
写一个程序求一棵二叉树中相距最远的两个结点之间的距离
2.解法
计算一个二叉树的最大距离无外乎两种情况:
A. 路径经过左子树的最深结点,再通过根节点,最后到右子树的最深结点。
B. 路径不穿过根节点,而是左子树或右子树的最大距离路径,取其最大者。
struct Node{
Node* left;//左子树
Node* right;//右子树
int maxleft;//左子树中的最长距离
int maxright;//右子树的最长距离
char val;//该结点的值
};
int nMaxLen = 0;
void FindMaxLen(Node* root){//寻找树中最长的两段距离
if (root == NULL)
return;//遍历到叶子节点,返回
//如果左子树为空,那么该节点的左边最长距离为0
if (root->left == NULL){
root->maxleft = 0;
}
if (root->right == NULL){
root->maxright = 0;
}
if (root->left != NUL