[C语言]求二叉树节点最大距离(C、JAVA 递归、非递归)

本文介绍了如何求解二叉树中两个节点的最大距离,提供了C语言和JAVA的递归及非递归四种实现方式,所有代码均经过验证可正确运行。
摘要由CSDN通过智能技术生成

求二叉树节点最大距离

注: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值