return 0 dl = self.printkDistanceNode(root.left, target, k) if dl != -1: if dl + 1 == k: print(root.val) else: self.printkDistanceNodeDown(root.right, k - dl - 2) return 1 + dl dr = self.printkDistanceNode(root.right, target, k) if dr != -1: if (dr + 1 == k): print(root.val) else: self.printkDistanceNodeDown(root.left, k - dr - 2) return 1 + dr return -1 sol = Solution() root: Node = TreeHelper.create_tree( [3, 5, 1, 6, 2, 9, 8, None, None, 7, 4, None, None, None, None]) TreeHelper.print_tree(root) sol.printkDistanceNode(root, root.left, 2)
self.first_min, self.second_min = maxsize, maxsize self.traverse_pre_order(root) return self.second_min if self.second_min < maxsize else -1 def traverse_pre_order(self, node: Node): if not node or not node.val: return if node.val < self.first_min: self.first_min = node.val elif self.first_min < node.val < self.second_min: self.second_min = node.val self.traverse_pre_order(node.left) self.traverse_pre_order(node.right) sol = Solution() tree = TreeHelper.create_tree([2, 2, 5, None, None, 5, 7]) TreeHelper.print_tree(tree) assert sol.findSecondMinimumValue(tree) == 5 tree = TreeHelper.create_tree([2, 2, 2]) TreeHelper.print_tree(tree) assert sol.findSecondMinimumValue(tree) == -1