求二叉树中的最大距离-后续递归实现 C++

在这里插入图片描述

/*求二叉树中的两个节点的最大距离
	每个节点的解max(左子树的最大距离、右子树的最大距离、左子树高度+右子树高度+1)
*/
class MaxDistace {
public:
	/*用于保存每个子树的最大距离以及高度*/
	typedef struct RetVal {
		int distance;
		int height;
		RetVal(int dis,int hei):distance(dis),height(hei){}
	};
	static int Do(TreeNode* root)
	{
		if (root == nullptr) return 0;
		return dfs(root).distance;
	}
private:
	static RetVal dfs(TreeNode* root)
	{
		if (root == nullptr)
		{
			return RetVal(0, 0);
		}
		RetVal left = dfs(root->left);
		RetVal right = dfs(root->right);
		int height = max(left.height, right.height)+1;
		int maxheight = left.height + right.height + 1;
		int distace = max(left.distance, right.distance);
		return RetVal(max(distace, maxheight), height);
	}
};
void main()
{
	TreeNode* node1 = new TreeNode(1);
	TreeNode* node2 = new TreeNode(2);
	TreeNode* node3 = new TreeNode(3);
	TreeNode* node4 = new TreeNode(4);
	TreeNode* node5 = new TreeNode(5);
	TreeNode* node6 = new TreeNode(6);
	TreeNode* node7 = new TreeNode(7);
	node1->Connect(node2, node3);
	node2->Connect(node4, node5);
	node3->Connect(node6, node7);
	cout << "maxDistance:" << MaxDistace::Do(node1)<< endl;
	system("pause");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值