1. <?php
    2. Class TreeNode {
    3. /** @var int $val */
    4. public $val = 0;
    5. /** @var TreeNode $left */
    6. public $left;
    7. /** @var TreeNode $right */
    8. public $right;
    9. public function __construct($val) {
    10. $this->val = $val;
    11. }
    12. }
    13. class Solution {
    14. public $max = 0;
    15. public function diameterOfBinaryTree($root) {
    16. if ($root == null) return 0;
    17. $this->helper($root);
    18. return $this->max;
    19. }
    20. // 取当前节点最大直径
    21. private function helper($root) {
    22. $left = ($root->left == null) ? 0 : $this->helper($root->left) + 1;
    23. $right = ($root->right == null) ? 0 : $this->helper($root->right) + 1;
    24. $this->max = max($this->max, $left + $right);
    25. return max($left, $right);
    26. }
    27. }
    28. /**
    29. * 4
    30. * / \
    31. * 2 6
    32. * / \ /
    33. * 1 3 5
    34. * /
    35. * 6
    36. */
    37. $tree = new TreeNode(4);
    38. $tree->left = new TreeNode(2);
    39. $tree->left->left = new TreeNode(1);
    40. $tree->left->left->left = new TreeNode(6);
    41. $tree->left->right = new TreeNode(3);
    42. $tree->right = new TreeNode(6);
    43. $tree->right->left = new TreeNode(5);
    44. $cls = new Solution();
    45. $r = $cls->diameterOfBinaryTree($tree);
    46. print_r($r);