From f367dfa899f923226e92ef106e7195017b1abb90 Mon Sep 17 00:00:00 2001 From: roshankumar447 Date: Sat, 7 Nov 2026 20:39:50 +0530 Subject: [PATCH 1/2] feat: add RightSideViewOfBinaryTree algorithm with tests --- .../trees/RightSideViewOfBinaryTree.java | 56 +++++++++++++++++ .../trees/RightSideViewOfBinaryTreeTest.java | 60 +++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 src/main/java/com/thealgorithms/datastructures/trees/RightSideViewOfBinaryTree.java create mode 100644 src/test/java/com/thealgorithms/datastructures/trees/RightSideViewOfBinaryTreeTest.java diff --git a/src/main/java/com/thealgorithms/datastructures/trees/RightSideViewOfBinaryTree.java b/src/main/java/com/thealgorithms/datastructures/trees/RightSideViewOfBinaryTree.java new file mode 100644 index 000000000000..6bb965aad4d6 --- /dev/null +++ b/src/main/java/com/thealgorithms/datastructures/trees/RightSideViewOfBinaryTree.java @@ -0,0 +1,56 @@ +package com.thealgorithms.datastructures.trees; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; + +/** + * Given the root of a binary tree, returns the values of the nodes visible + * from the right side (the last node of each level in a level-order traversal). + * + *

Example: + *

+ *      1
+ *     / \
+ *    2   3
+ *     \   \
+ *      5   4
+ * Right side view: [1, 3, 4]
+ * 
+ * + *

Time complexity: O(n), Space complexity: O(n) + * + * @see LeetCode #199 + */ +public final class RightSideViewOfBinaryTree { + private RightSideViewOfBinaryTree() { + } + + public static List rightSideView(BinaryTree.Node root) { + List result = new ArrayList<>(); + if (root == null) { + return result; + } + + Queue queue = new LinkedList<>(); + queue.add(root); + + while (!queue.isEmpty()) { + int levelSize = queue.size(); + for (int i = 0; i < levelSize; i++) { + BinaryTree.Node node = queue.poll(); + if (i == levelSize - 1) { + result.add(node.data); + } + if (node.left != null) { + queue.add(node.left); + } + if (node.right != null) { + queue.add(node.right); + } + } + } + return result; + } +} diff --git a/src/test/java/com/thealgorithms/datastructures/trees/RightSideViewOfBinaryTreeTest.java b/src/test/java/com/thealgorithms/datastructures/trees/RightSideViewOfBinaryTreeTest.java new file mode 100644 index 000000000000..92685b68ab9f --- /dev/null +++ b/src/test/java/com/thealgorithms/datastructures/trees/RightSideViewOfBinaryTreeTest.java @@ -0,0 +1,60 @@ +package com.thealgorithms.datastructures.trees; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Collections; +import java.util.List; +import org.junit.jupiter.api.Test; + +public class RightSideViewOfBinaryTreeTest { + + @Test + public void testNullRoot() { + assertEquals(Collections.emptyList(), RightSideViewOfBinaryTree.rightSideView(null)); + } + + @Test + public void testSingleNode() { + final BinaryTree.Node root = TreeTestUtils.createTree(new Integer[] {1}); + assertEquals(List.of(1), RightSideViewOfBinaryTree.rightSideView(root)); + } + + /* + 1 + / \ + 2 3 + \ \ + 5 4 + */ + @Test + public void testRightSideView() { + final BinaryTree.Node root = TreeTestUtils.createTree(new Integer[] {1, 2, 3, null, 5, null, 4}); + assertEquals(List.of(1, 3, 4), RightSideViewOfBinaryTree.rightSideView(root)); + } + + /* + 1 + / + 2 + / + 3 + */ + @Test + public void testLeftSkewedTree() { + final BinaryTree.Node root = TreeTestUtils.createTree(new Integer[] {1, 2, null, 3}); + assertEquals(List.of(1, 2, 3), RightSideViewOfBinaryTree.rightSideView(root)); + } + + /* + 1 + \ + 2 + \ + 3 + */ + @Test + public void testRightSkewedTree() { + final BinaryTree.Node root = TreeTestUtils.createTree(new Integer[] {1, null, 2, null, null, null, 3}); + assertEquals(List.of(1, 2, 3), RightSideViewOfBinaryTree.rightSideView(root)); + } +} From cc8cad1d4b989461216056575a829966135a36e8 Mon Sep 17 00:00:00 2001 From: roshankumar447 Date: Tue, 10 Nov 2026 16:49:43 +0530 Subject: [PATCH 2/2] fix: correct input array for testRightSkewedTree --- .../datastructures/trees/RightSideViewOfBinaryTreeTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/datastructures/trees/RightSideViewOfBinaryTreeTest.java b/src/test/java/com/thealgorithms/datastructures/trees/RightSideViewOfBinaryTreeTest.java index 92685b68ab9f..ded92d4d8de5 100644 --- a/src/test/java/com/thealgorithms/datastructures/trees/RightSideViewOfBinaryTreeTest.java +++ b/src/test/java/com/thealgorithms/datastructures/trees/RightSideViewOfBinaryTreeTest.java @@ -54,7 +54,7 @@ public void testLeftSkewedTree() { */ @Test public void testRightSkewedTree() { - final BinaryTree.Node root = TreeTestUtils.createTree(new Integer[] {1, null, 2, null, null, null, 3}); + final BinaryTree.Node root = TreeTestUtils.createTree(new Integer[] {1, null, 2, null, 3}); assertEquals(List.of(1, 2, 3), RightSideViewOfBinaryTree.rightSideView(root)); } }