数据结构 - 求二叉树中结点的最大距离(C++)

本文详细介绍了B树节点长度计算的实现方法,包括模板类的使用、递归查找子树最大长度以及如何更新根节点的最大长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// ------BTreeMaxNodeLength.cpp------

#include <iostream>

using namespace std;

template <class T>
struct BTNode
{
	// 左孩子
	BTNode<T> *lChild;
	// 右孩子
	BTNode<T> *rChild;
	// 该结点的值
	T data;
	// 左子树最长距离
	int leftSubTreeMaxLength;
	// 右子树最长距离
	int rightSubTreeMaxLength;
};

template <class T>
class BinaryTree
{
public:
	void GetMaxNodeLength(BTNode<T> * root, int *maxNodeLength)
	{
		// 遍历到叶子结点,返回
		if (root == NULL)
		{
			return;
		}

		// 假设左子树为空,那么该结点左子树最长距离为0
		if (root->lChild == NULL)
		{
			root->leftSubTreeMaxLength = 0;
		}

		// 假设右子树为空,那么该结点右子树最长距离为0
		if (root->rChild == NULL)
		{
			root->rightSubTreeMaxLength = 0;
		}

		// 假设左子树不为空,递归查找左子树最长距离
		if (root->lChild != NULL)
		{
			GetMaxNodeLength(root->lChild, maxNodeLength);
		}

		// 假设右子树不为空,递归查找右子树最长距离
		if (root->rChild != NULL)
		{
			GetMaxNodeLength(root->rChild, maxNodeLength);
		}

		// 计算左子树中距离根结点的最长距离
		if (root->lChild != NULL)
		{
			if (root->lChild->leftSubTreeMaxLength > root->lChild->rightSubTreeMaxLength)
			{
				root->leftSubTreeMaxLength = root->lChild->leftSubTreeMaxLength + 1;
			}
			else
			{
				root->leftSubTreeMaxLength = root->lChild->rightSubTreeMaxLength + 1;
			}
		}

		// 计算右子树中距离根结点的最长距离
		if (root->rChild != NULL)
		{
			if (root->rChild->leftSubTreeMaxLength > root->rChild->rightSubTreeMaxLength)
			{
				root->rightSubTreeMaxLength = root->rChild->leftSubTreeMaxLength + 1;
			}
			else
			{
				root->rightSubTreeMaxLength = root->rChild->rightSubTreeMaxLength + 1;
			}
		}

		// 更新最长距离
		if (root->leftSubTreeMaxLength + root->rightSubTreeMaxLength > *maxNodeLength)
		{
			*maxNodeLength = root->leftSubTreeMaxLength + root->rightSubTreeMaxLength;
		}
	}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值