题解 | #二叉树中和为某一值的路径(一)#

二叉树中和为某一值的路径(一)

http://www.nowcoder.com/practice/508378c0823c423baa723ce448cbfd0c

思路1:使用递归

对于当前节点,只要满足一下任意一个条件即返回true

  1. 节点为叶子节点 && 节点值等于sum
  2. 节点的左子树 且 sum减去节点的值 能满足条件
  3. 节点的右子树 且 sum减去节点的值 能满足条件
public boolean hasPathSum (TreeNode root, int sum) {
  if(root == null){
    return false;
  }
  if (root.left == null && root.right == null){
    if (root.val == sum){
      return true;
    }else{
      return false;
    }
  }
  if (root.val >= sum){
    return false;
  }
  return hasPathSum(root.left, sum-root.val)
    || hasPathSum(root.right, sum-root.val);
}

思路2:使用栈来回溯

回溯需要使用辅助栈判断走到当前这节点时,是应该继续探索左右子树,还是弹出

public boolean hasPathSum (TreeNode root, int sum) {
  if (root == null){
    return false;
  }
  Stack<TreeNode> stack = new Stack<TreeNode>();
  //记录指针走对对应节点时,是什么情况,1:第一次走到,2:左子数回溯而来,3:右子树回溯而来
  Stack<Integer> stack2 = new Stack<Integer>();
  stack.push(root);
  stack2.push(1);
  sum -= root.val;
  while (!stack.isEmpty()){
    TreeNode peek = stack.peek();
    Integer peek2 = stack2.peek();
    if (peek.left == null && peek.right == null && sum == 0){
      return true;
    }
    if (peek2 == 1){
      stack2.pop();
      stack2.push(2);
      //探索左子树
      if (peek.left != null){
        stack.push(peek.left);
        stack2.push(1);
        sum -= peek.left.val;
      }
    }else if (peek2 == 2){
      stack2.pop();
      stack2.push(3);
      //探索右子树
      if (peek.right != null){
        stack.push(peek.right);
        stack2.push(1);
        sum -= peek.right.val;
      }
    }else{
      //左右子树探索完了,弹出
      stack.pop();
      stack2.pop();
      sum += peek.val;
    }
  }
  return false;
}
全部评论

相关推荐

就前几天旅游的时候,打开抖音就经常刷到这类视频:以前是高学历学生、老师、主持人,现在做着团播、擦边主播的工作,以及那些经过精心包装的“职业转型”故事——从铺天盖地的VLOG到所谓的“04年夜场工作日记”,这些内容在初中升学、高考放榜等关键时间节点持续发酵。可以说非常直接且精准地在潜移默化地影响着心智尚未成熟的青少年,使其对特殊行业逐渐脱敏。那我就想问了:某些传播公司、平台运营者甚至某些夜场的老板,你们究竟在传递怎样的价值观?点开那些视频,评论区里也是呈现明显的两极分化:一种是​​经济下行论​​:“现在就业市场已经艰难到这种程度了吗?”​​一种是事实反驳派​​:这些创作者往往拥有名校背景,从事着...
牛客刘北:被环境教育的,为了能拿到足够的钱养活自己,不甘心也得甘心,现在的短视频传播的思想的确很扭曲,但是很明显,互联网玩上一年你就能全款提A6,但你全心全意不吃不喝工作一年未必能提A6,但是在高考中考出现这个的确很扭曲,在向大家传播“不上学,玩互联网也可以轻松年入百万”,不是人变了,是社会在变
预测一下26届秋招形势
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务