Leetcode基础刷题之PHP解析(129. Sum Root to Leaf Numbers)
2019-8-21 星期三 开始吧
上一题链接Leetcode基础刷题之PHP解析(128. Longest Consecutive Sequence)

题目描述
给定一个只包含0-9的二叉树。每一个根节点到叶子节点都代表着一个数字,求所有根节点到叶子节点的总和。
题目分析
既然是根节点到叶子节点这种一条路走到黑的形式当然是DFS来解了,不同的是,在demo中我们可以看到,每到一个新的节点,其实是把当前父节点的值乘以10倍再加上当前结点的。最终再把全部DFS不同的路径总和起来就是这道题的解。代码实现
/**
* 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->helper($root,0);
}
function helper($root,$num)
{
if(!$root) return 0;
$num=$num*10+$root->val;
if(!$root->left && !$root->right){
return $num;
}
return $this->helper($root->left,$num)+$this->helper($root->right,$num);
}
}
这可是php啊,还需要*10这种操作吗,直接在后面拼上字符串不就行了,改一下。
/**
* @param TreeNode $root
* @return Integer
*/
function sumNumbers($root) {
return $this->helper($root,'');
}
function helper($root,$num)
{
if(!$root) return 0;
$num .=$root->val;
if(!$root->left && !$root->right){
return $num;
}
return $this->helper($root->left,$num)+$this->helper($root->right,$num);
}
}
看下ac完全没问题

这里使用的是递归,你可以试着咋么使用迭代的方式实现.
No Comments