深度优先1
/**
* Definition for a binary tree node.
* class TreeNode {
* public $val = null;
* public $left = null;
* public $right = null;
* function __construct($value) { $this->val = $value; }
* }
*/
class Solution {
/**
* @param TreeNode $root
* @return Integer
*/
function sumNumbers($root) {
$sum = 0;
$this->dfs($root, $sum, 0);
return $sum;
}
function dfs($root, &$sum, $current) {
if ($root) {
$current = $current*10 + $root->val;
if ($root->left == null && $root->right == null) {
$sum += $current;
} else {
$this->dfs($root->left, $sum, $current);
$this->dfs($root->right, $sum, $current);
}
}
}
}
深度优先2
/**
* Definition for a binary tree node.
* class TreeNode {
* public $val = null;
* public $left = null;
* public $right = null;
* function __construct($value) { $this->val = $value; }
* }
*/
class Solution {
/**
* @param TreeNode $root
* @return Integer
*/
function sumNumbers($root) {
return $this->dfs($root, 0);
}
function dfs($root, $sum) {
if ($root) {
$sum = $sum*10 + $root->val;
if ($root->left == null && $root->right == null) {
return $sum;
} else {
return $this->dfs($root->left, $sum) + $this->dfs($root->right, $sum);
}
} else {
return 0;
}
}
}
广度优先
/**
* Definition for a binary tree node.
* class TreeNode {
* public $val = null;
* public $left = null;
* public $right = null;
* function __construct($value) { $this->val = $value; }
* }
*/
class Solution {
/**
* @param TreeNode $root
* @return Integer
*/
function sumNumbers($root) {
$sum = 0;
if ($root == null ) return $sum;
$queue = [];
$left = $right = 0;
$queue[$right++] = $root;
while($left != $right) {
$node = $queue[$left++];
if ($node->left == null && $node->right == null) {
$sum += $node->val;
} else {
$node->val *= 10;
if ( $node->left ) {
$node->left->val += $node->val;
$queue[$right++] = $node->left;
}
if ( $node->right ) {
$node->right->val += $node->val;
$queue[$right++] = $node->right;
}
}
}
return $sum;
}
}