From 9ede10710291471c067647596f8ba343e94b0512 Mon Sep 17 00:00:00 2001 From: takudzwa Date: Wed, 4 Mar 2026 21:16:45 -0500 Subject: [PATCH] [cousins && rightSideView] --- CousinNodes.java | 42 ++++++++++++++++++++++++++++++++++++++++++ RightSideView.java | 31 +++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 CousinNodes.java create mode 100644 RightSideView.java diff --git a/CousinNodes.java b/CousinNodes.java new file mode 100644 index 00000000..37f76061 --- /dev/null +++ b/CousinNodes.java @@ -0,0 +1,42 @@ +// Time: O(n) +// Space: O(n) +// Ran succesfully on Leetcode: yes +class Solution { + public boolean isCousins(TreeNode root, int x, int y) { + // initialize queue + Queue q = new LinkedList<>(); + q.add(root); + + while (!q.isEmpty()) { + // reinitialize present for every level + int size = q.size(); + boolean x_present = false; + boolean y_present = false; + // iterate over the snapshot for the level by level + for (int i = 0; i < size; i++) { + + TreeNode curr = q.poll(); + // if same parent then siblings + if (curr.left != null && curr.right != null) { + if ((curr.left.val == x && curr.right.val == y) || + (curr.left.val == y && curr.right.val == x)) { + + return false; + } + } + + if (curr.val == x) x_present = true; + if (curr.val == y) y_present = true; + + if (curr.left != null) q.add(curr.left); + if (curr.right != null) q.add(curr.right); + } + // for each level finally check if both are present + if (x_present && y_present) return true; + if (x_present || y_present) return false; + } + + return false; + } + +} \ No newline at end of file diff --git a/RightSideView.java b/RightSideView.java new file mode 100644 index 00000000..a2162a97 --- /dev/null +++ b/RightSideView.java @@ -0,0 +1,31 @@ +// TimeComplexity: O(n) +// SpaceComplexity: O(W) +// Ran succesfully on Leetcode: yes +class Solution { + public List rightSideView(TreeNode root) { + List list = new ArrayList<>(); + if (root == null) return list; + // initialize queue + Queue q = new LinkedList<>(); + q.add(root); + int size = q.size(); + + while (!q.isEmpty()) { + TreeNode curr = q.poll(); + size--; + if (curr.left != null) { + q.add(curr.left); + } + if (curr.right != null) { + q.add(curr.right); + } + // take new size snapshot of the queue and add right most val for the level + if (size == 0) { + size = q.size(); + list.add(curr.val); + } + } + return list; + + } +} \ No newline at end of file