You are currently viewing Help me understand the logic why the code is not returning `false` boolean here at once

Help me understand the logic why the code is not returning `false` boolean here at once

The code could might feel huge, but my only doubt is in the function find() inside the if statement root == null

See if root == null is true, then the find function must return false right?

But what happens according to debugging is:

Only should print once BUT it print multiple times (!?) --> null Only should print once BUT it print multiple times (!?) --> null Only should print once and it prints one time only as expected! result true

The important part in the above println logs is Only should print once BUT it print multiple times (!?) --> null is root == null is true and we are entering the if block, so the function find() at once MUST return true and exit right?

But what happens it, the code is seemingly ignoring that and not returning false!! and here is where I am confused!

Code below:

“`kotlin

class TwoSumIV {

class TreeNode(var `val`: Int = 0) { var left: TreeNode? = null var right: TreeNode? = null } fun findTarget(root: TreeNode?, k: Int): Boolean { val set: MutableSet<Int?> = HashSet<Int?>() return find(root, k, set) } fun find(root: TreeNode?, k: Int, set: MutableSet<Int?>): Boolean { if (root == null) { println("Only should print once BUT it print multiple times (!?) --> ${root?.`val`}") return false } else if (set.contains(k - root.`val`)) { println("Only should print once and it prints one time only as expected!") return true } set.add(root.`val`) return find(root.left, k, set) || find(root.right, k, set) } 

}

fun main() { val root = TwoSumIV.TreeNode(5) root.left = TwoSumIV.TreeNode(3) root.right = TwoSumIV.TreeNode(6)

println(root) val twoSumIV = TwoSumIV() val result = twoSumIV.findTarget(root, 9) println("result $result") 

} “`

submitted by /u/Kaori_iu
[link] [comments]