求二叉树的最大距离

求二叉树的最大距离就是求两个节点之间路径最长的节点。

问题可以分为两种情况:

第一种情况:最长为左子树的最深节点到右子树的最深节点。

第二种情况:在左子树或者右子树中,就最远,不经过根节点。

<?php
class TreeNode{
	var $val;
	var $left=null;
	var $right=null;
	function __construct($val){
		$this->val=$val;
	}
}
class result{
	var $maxdistance;
	var $maxdepth;
	 function __construct($a,$b){
		 $this->maxdistance=$a;
		 $this->maxdepth=$b;
	}
}
//调用
$result=FindMaxdistance($root);
print $result->maxdistance;
function FindMaxdistance($root){
	if($root!=null){
		$leftresult=FindMaxdistance($root->left);
		$rightresult=FindMaxdistance($root->right);
		$result=new result();
		$result->maxdepth=(($leftresult->maxdepth+1)>($rightresult->maxdepth+1))?($leftresult->maxdepth+1):($rightresult->maxdepth+1);
		$maxdistance1=($leftresult->maxdistance>$rightresult->maxdistance)?$leftresult->maxdistance:$rightresult->maxdistance;
		$maxdistance2=$leftresult->maxdepth+$rightresult->maxdepth+1;
		$result->maxdistance=($maxdistance1>$maxdistance2)?$maxdistance1:$maxdistance2;
		return $result;
	}else{
		return new result(0,-1);
	}
}
?>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值