层序遍历的巧用

需求

给定一个仅包含数字0-9 0−9 的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。
例如根节点到叶子节点的一条路径是1→2→3,那么这条路径就用123 来代替。
找出根节点到叶子节点的所有路径表示的数字之和
在这里插入图片描述
这颗二叉树一共有两条路径,
根节点到叶子节点的路径 12
根节点到叶子节点的路径 13
答案为 12+13=25

常规思路

  • 先求得根节点到各自叶子节点路径
  • 将路径信息转为数字信息相加求和

golang实现

import "math"
func sumNumbers( root *TreeNode ) int {
    var sum int
    var convert func([]int)int
    var root2leaf func(*TreeNode, []int)
    
    convert = func(path []int) int{
        rs :=0
        for i:=0;i<len(path);i++{
            rs +=path[i]* int(math.Pow10(len(path)-1-i))
        }
        return rs
    }
    root2leaf = func(root *TreeNode,path []int){
        if root == nil {
            return 
        }
        if root.Left==nil && root.Right==nil {
            path = append(path,root.Val)
            sum +=convert(path)
            return 
        }
        root2leaf(root.Left,append(path,root.Val))
        root2leaf(root.Right,append(path,root.Val))
    }
    root2leaf(root,[]int{})
    return sum
}

层序思维

  • 充分复用入参二叉树本身层序性
  • 先序遍历的思想(根左右)+数字求和
  • 每一层都比上层和*10+当前根节点的值

python解法

        def preOrderSum(root,curSum):
            if root is None:
                return 0
            curSum = curSum*10+root.val
            if root.left is None and root.right is None:
                return curSum
            return preOrderSum(root.left, curSum)+preOrderSum(root.right, curSum)
        return preOrderSum(root, 0)

小结

巧思路可以省不少事

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值