求二叉树的最大距离就是求两个节点之间路径最长的节点。
问题可以分为两种情况:
第一种情况:最长为左子树的最深节点到右子树的最深节点。
第二种情况:在左子树或者右子树中,就最远,不经过根节点。
<?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);
}
}
?>