File tree
Expand file treeCollapse file tree1 file changed
+48
-0
lines changed Expand file treeCollapse file tree1 file changed
+48
-0
lines changed Original file line number | Diff line number | Diff line change |
---|
|
| 1 | +/** |
| 2 | +* Definition for a binary tree node. |
| 3 | +* public class TreeNode { |
| 4 | +* int val; |
| 5 | +* TreeNode left; |
| 6 | +* TreeNode right; |
| 7 | +* TreeNode() {} |
| 8 | +* TreeNode(int val) { this.val = val; } |
| 9 | +* TreeNode(int val, TreeNode left, TreeNode right) { |
| 10 | +* this.val = val; |
| 11 | +* this.left = left; |
| 12 | +* this.right = right; |
| 13 | +* } |
| 14 | +* } |
| 15 | +*/ |
| 16 | +class Solution { |
| 17 | +public TreeNode correctBinaryTree(TreeNode root) { |
| 18 | +Queue<Pair> queue = new LinkedList<>(); |
| 19 | +queue.add(new Pair(root, null)); |
| 20 | +while (!queue.isEmpty()) { |
| 21 | +int size = queue.size(); |
| 22 | +Set<TreeNode> visited = new HashSet<>(); |
| 23 | +for (int i = 0; i < size; i++) { |
| 24 | +Pair pair = queue.remove(); |
| 25 | +TreeNode node = pair.node(); |
| 26 | +TreeNode parent = pair.parent(); |
| 27 | +if (visited.contains(node.right)) { |
| 28 | +if (parent.left == node) { |
| 29 | +parent.left = null; |
| 30 | +} else { |
| 31 | +parent.right = null; |
| 32 | +} |
| 33 | +return root; |
| 34 | +} |
| 35 | +visited.add(node); |
| 36 | +if (node.right != null) { |
| 37 | +queue.add(new Pair(node.right, node)); |
| 38 | +} |
| 39 | +if (node.left != null) { |
| 40 | +queue.add(new Pair(node.left, node)); |
| 41 | +} |
| 42 | +} |
| 43 | +} |
| 44 | +return root; |
| 45 | +} |
| 46 | + |
| 47 | +private static record Pair(TreeNode node, TreeNode parent) {} |
| 48 | +} |
You can’t perform that action at this time.
0 commit comments