Liu_064
Liu_064

Reputation: 33

Recursion does not work with one line solution

The question is about Leetcode 938.

My first solution is

return root == null ? 0 : root.val < low || root.val > high ? RangeSumBST(root.left, low, high) + RangeSumBST(root.right, low, high) : RangeSumBST(root.left, low, high) + RangeSumBST(root.right, low, high) + root.val;

And it is accepted.

Then I tried another one line solution for simplicity and readability

return root == null ? 0 : RangeSumBST(root.left, low, high) + RangeSumBST(root.right, low, high) + root.val < low || root.val > high ? 0 : root.val;

But it seems recursion doesn't work with the second solution. Only the most root value can be returned.

I would like to know what's the difference between these two solutions and why recursion does not work with the second solution.

Upvotes: 0

Views: 66

Answers (1)

user3682728
user3682728

Reputation: 465

As the other's answers ,let make it more simpler.

//solution #1
return  (condition) ? 
( constant value )  //check condition T then constant value add 0 
 : 
( constant value) + root.val; //check condition F then constant value add root.val


//solution #2
return  (( constant value ) + root.val ) < low|| root.val > high ?  
 0 // check new condition T then get only 0 
: 
root.val; // check new condition F then get only root.val 

as @Fildor's answer you should add the parenthesis

return root == null ? 0 : ( RangeSumBST(root.left, low, high) + RangeSumBST(root.right, low, high) )   +  ( (root.val < low || root.val > high) ? 0 : root.val );

Upvotes: 1

Related Questions