牛客网刷题之树

题目描述:
给定一个仅包含数字0-9的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。
例如根节点到叶子节点的一条路径是1->2->3,那么这条路径就用123来代替。
找出根节点到叶子节点的所有路径表示的数字之和
例如:

1↵   / ↵  2   3

根节点到叶子节点的路径1->2用数字12代替
根节点到叶子节点的路径1->3用数字13代替
所以答案为12+13=25
题目分析:
将树从根节点进行遍历,每到一个叶子节点就是一个数,其路径上的各个节点相当于上一个节点的val10+当前节点的值val。将其累加起来就是所要求的和。每个节点相当于可以看做是递归过程,当前节点的子节点不为空是当前节点的值10+子节点的计算结果。
代码分析:

public class Solution {
    public int sumNumbers(TreeNode root) {
        if(root==null){//边界判断,空树返回0
            return 0;
        }
        if(root.left==null&&root.right==null){//若树只有根节点,则返回根节点的值
            return root.val;
        }
      return findNode(root,0);//传递树的头结点和sum初始值
    }
    public int findNode(TreeNode node,int sum){//相当于树的前序遍历
        sum=sum*10+node.val;
        if(node.left==null&&node.right==null){//若为叶子节点不用进行递归
            return sum;
        }
        int left=0;int right=0;
        if(node.left!=null){//递归求左子树的和
           left= findNode(node.left,sum);
        }
      if(node.right!=null){//递归求右子树的和
          right= findNode(node.right,sum);
       }
        return left+right;//左树和右树相加为结果
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值