求二叉树最远2结点的距离

二叉树最远两结点之间的距离如下图所示
在这里插入图片描述
在这里插入图片描述
思路:利用二叉树的高度求解此题,就是遍历每个结点,计算该节点左右子树的高度之和,然后就是在这些和当中取最大值即可.

#include <iostream>
using namespace std;
/*
求二叉树最远结点距离
*/

static int max = 0; //记录结果的值

template <class T> //这里用了模板
struct btree {
	T data;
	struct btree<T>* lchild;
	struct btree<T>* rchild;
};

typedef btree<int> btnode;
typedef int mytype;

/*初始化二叉树  输入0为空结点*/
void init(btnode* &root) {
	root = new btnode;
	int num;
	cin >> num;
	if (num) {
		root->data = num;
		init(root->lchild);
		init(root->rchild);
	}
	else {
		root = NULL;
	}
}
/*获得二叉树的深度*/
int getHeight(btnode*& root) {
	if (root) {
		int leftHeight = 0;
		int rightHeight = 0;
		leftHeight = getHeight(root->lchild);
		rightHeight = getHeight(root->rchild);
		return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
	}
	return 0;
}

/*利用前序遍历 求出每个结点左右子树深度之和 求出最大值*/
int getMaxDistance(btnode* &root) {
	if (root) {
		int leftHeight = getHeight(root->lchild);
		int rightHeight = getHeight(root->rchild);
		max = (leftHeight + rightHeight) > max ? (leftHeight + rightHeight) : max;
		getMaxDistance(root->lchild);  //前序遍历
		getMaxDistance(root->rchild);
	}
	else {
		return 0;
	}
}

int main()
{
	btnode* root;
	init(root);

	getMaxDistance(root);
	cout << max;

	return 0;
}

测试用例:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值