PHPは二叉木の距離が最も長い二つのノード間の距離を計算する
9921 ワード
1 <?php
2 # ,
3 # : 3
4 #1. , ,
5 #2. ,
6 #3. ,
7
8 class Node {
9 public $data = null;
10 public $left = null;
11 public $right = null;
12 public $parent = null;
13 }
14
15 function get_max_long($root, &$depth) {
16 #
17 if ($root == null) {
18 $depth = 0;
19 return 0;
20 }
21 # ,
22 $left_max = get_max_long($root->left, $ld);
23 $right_max = get_max_long($root->right, $rd);
24 $depth = max($ld, $rd) + 1;
25
26 // echo "{$ld}|{$rd}|{$left_max}|{$right_max}<br>";
27 return max($ld + $rd, max($left_max, $right_max));
28 }
29
30 #
31 #
32 function get_depth($root) {
33 if (!$root) {
34 return 0;
35 }
36
37 $ld = get_depth($root->left) + 1;
38 $rd = get_depth($root->right) + 1;
39
40 return max($ld, $rd);
41 }
42
43 $root = new Node();
44 $n1 = new Node();
45 $n2 = new Node();
46 $n11 = new Node();
47 $n12 = new Node();
48 $n13 = new Node();
49 $n14 = new Node();
50 $n15 = new Node();
51 $n21 = new Node();
52
53 $root->left = $n1;
54 $root->right = $n2;
55 $n1->left = $n11;
56 $n1->right = $n12;
57 $n11->left = $n13;
58 $n12->right = $n14;
59 $n13->left = $n15;
60 $n2->right = $n21;
61
62 $max = get_max_long($root, $depth);
63 echo $max;
64 ?>
4 10 3 1 7 11 8 2