给定二叉树和求和,确定树是否具有根到叶路径,使得沿路径的所有值相加等于给定的总和。
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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 ubuntu子系统密码忘记
- ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料
- ¥15 使用R语言marginaleffects包进行边际效应图绘制
- ¥20 usb设备兼容性问题
- ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
- ¥15 安装svn网络有问题怎么办
- ¥15 vue2登录调用后端接口如何实现