努力做最好的 2022-09-20 18:04 采纳率: 100%
浏览 16
已结题

路径和-给定二叉树和求和,确定树是否具有根到叶路径

给定二叉树和求和,确定树是否具有根到叶路径,使得沿路径的所有值相加等于给定的总和。

  • 写回答

1条回答 默认 最新

  • 小镇春风 2022-09-20 18:40
    关注

    思路一:递归\n这道题用递归来解的话非常简单,我们把二叉树的根节点记为 root,如果我们想判断一颗二叉树是否存在路径和 sum,那么只需判断其左子树或者右子树是否存在路径和 sum-root.val。
    代码如下:

    public boolean hasPathSum(TreeNode root, int sum)
     {    if (root == null)     return false;    int val = root.val;   
     if (root.left == null && root.right == null && val == sum)      
     return true;   
     return hasPathSum(root.left, sum - val) || hasPathSum(root.right, sum - val);}
    
    

    思路二:迭代——用栈代替递归利用栈先入后出的特点,我们可以对思路一中的递归代码进行改造,代码如下:

    public boolean hasPathSum_iteration(TreeNode root, int sum){
        if (root == null)
            return false;
        Stack<TreeNode> stack = new Stack<>();
        Stack<Integer> path = new Stack<>();
    
        TreeNode t = root;
        Integer val = root.val;
        stack.push(t);
        path.push(val);
        while (!stack.isEmpty()){
            t = stack.pop();
            val = path.pop();
            if (t.left == null && t.right == null && sum == val){ //到达了叶子结点,且路径总和正好等于sum
                return true;
            }
            if (t.left != null){
                stack.push(t.left);
                path.push(val + t.left.val);
            }
            if (t.right != null){
                stack.push(t.right);
                path.push(val + t.right.val);
            }
        }
        return false;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月28日
  • 已采纳回答 9月20日
  • 创建了问题 9月20日

悬赏问题

  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 vue2登录调用后端接口如何实现