求二叉树节点最大距离
注:C语言的两种实现代码参考了前辈的文章, JAVA为原创,4段代码均运行通过
C语言 递归实现
#include<stdio.h>
#include <stdlib.h>
//求二叉树节点最大距离
//C语言 递归实现
typedef struct node{
struct node *left;
struct node *right;
int maxLeft;
int maxRight;
}treeNode;
int maxLength = 0;
treeNode* getNewNode(){
treeNode *temp;
temp= (treeNode*)malloc(sizeof(treeNode));
temp->maxLeft = 0;
temp->maxRight = 0;
temp->left = NULL;
temp->right = NULL;
return temp;
}
void findMaxLength(treeNode *root){
if(root == NULL)
return;
//如果左子树不为空,递归寻找左边最长距离
if(root->left != NULL)
findMaxLength(root->left);
//如果右子树不为空,递归寻找右边最长距离
if(root->right != NULL)
findMaxLength(root->right);
//计算左子树最长节点距离
if(root->left != NULL){
if(root->left->maxLeft > root->left->maxRight)
root->maxLeft = root->left->maxLeft + 1;
else
root->maxLeft = root->left->maxRight + 1;
}
//计算右子树最长节点距离
if(root->right != NULL){
if(root->right->maxLeft > root->right->maxRight)
root->maxRight = root->right->maxLeft + 1;
else
root->maxRight =root->right->maxRight + 1;
}
//更新最长距离
if(root->maxLeft + root->maxRight > maxLength)
maxLength = root->maxLeft + root->maxRight;
}
tre