diff --git a/GeeksForGeeks/March/22-3-24/GFG.java b/GeeksForGeeks/March/22-3-24/GFG.java new file mode 100644 index 0000000..5d23703 --- /dev/null +++ b/GeeksForGeeks/March/22-3-24/GFG.java @@ -0,0 +1,148 @@ +//{ Driver Code Starts +//Initial Template for Java + +import java.util.LinkedList; +import java.util.Queue; +import java.io.*; +import java.util.*; + +class Node{ + int data; + Node left; + Node right; + Node(int data){ + this.data = data; + left=null; + right=null; + } +} + +class GfG { + + static Node buildTree(String str){ + + if(str.length()==0 || str.charAt(0)=='N'){ + return null; + } + + String ip[] = str.split(" "); + // Create the root of the tree + Node root = new Node(Integer.parseInt(ip[0])); + // Push the root to the queue + + Queue queue = new LinkedList<>(); + + queue.add(root); + // Starting from the second element + + int i = 1; + while(queue.size()>0 && i < ip.length) { + + // Get and remove the front of the queue + Node currNode = queue.peek(); + queue.remove(); + + // Get the current node's value from the string + String currVal = ip[i]; + + // If the left child is not null + if(!currVal.equals("N")) { + + // Create the left child for the current node + currNode.left = new Node(Integer.parseInt(currVal)); + // Push it to the queue + queue.add(currNode.left); + } + + // For the right child + i++; + if(i >= ip.length) + break; + + currVal = ip[i]; + + // If the right child is not null + if(!currVal.equals("N")) { + + // Create the right child for the current node + currNode.right = new Node(Integer.parseInt(currVal)); + + // Push it to the queue + queue.add(currNode.right); + } + i++; + } + + return root; + } + static void printInorder(Node root) + { + if(root == null) + return; + + printInorder(root.left); + System.out.print(root.data+" "); + + printInorder(root.right); + } + + public static void main (String[] args) throws IOException{ + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + int t=Integer.parseInt(br.readLine()); + + while(t > 0) + { + String s = br.readLine(); + Node root = buildTree(s); + Tree g = new Tree(); + ArrayList res = g.diagonalSum(root); + for (Integer num : res) System.out.print(num + " "); + System.out.println(); + t--; + + } + } + +} + + +// } Driver Code Ends + + +/*Complete the function below +Node is as follows: +class Node{ + int data; + Node left,right; + Node(int d){ + data=d; + left=right=null; + } +} +*/ +class Tree +{ + public static void diagonalSumUtil(Node root, int diagonal, Map map) + { + // base case: empty tree + if (root == null) + return; + + map.put(diagonal, map.getOrDefault(diagonal, 0) + root.data); + diagonalSumUtil(root.left, diagonal + 1, map); + diagonalSumUtil(root.right, diagonal, map); + } + + public static ArrayList diagonalSum(Node root) + { + ArrayList res = new ArrayList (0); + Map map = new HashMap<>(); + diagonalSumUtil(root, 0, map); + + for (Integer key : map.values()) + res.add(key); + + return res; + } +} diff --git a/GeeksForGeeks/March/22-3-24/README.md b/GeeksForGeeks/March/22-3-24/README.md new file mode 100644 index 0000000..fbf4193 --- /dev/null +++ b/GeeksForGeeks/March/22-3-24/README.md @@ -0,0 +1,2 @@ +Time complexity - O(n * logn) +Space complexity - O(n) diff --git a/LeetCode/March/22-3-24/README.md b/LeetCode/March/22-3-24/README.md new file mode 100644 index 0000000..9567f26 --- /dev/null +++ b/LeetCode/March/22-3-24/README.md @@ -0,0 +1,2 @@ +Time complexity - O(n) +Space complexity - O(1) diff --git a/LeetCode/March/22-3-24/Solution.java b/LeetCode/March/22-3-24/Solution.java new file mode 100644 index 0000000..78c6ca6 --- /dev/null +++ b/LeetCode/March/22-3-24/Solution.java @@ -0,0 +1,55 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution +{ + public boolean isPalindrome(ListNode head) + { + ListNode slow = head; + ListNode fast = head; + + while (fast != null && fast.next != null) + { + slow = slow.next; + fast = fast.next.next; + } + + if (fast != null) + slow = slow.next; + + slow = reverseList(slow); + + while (slow != null) + { + if (slow.val != head.val) + return false; + + slow = slow.next; + head = head.next; + } + + return true; + } + + private ListNode reverseList(ListNode head) + { + ListNode prev = null; + + while (head != null) + { + ListNode next = head.next; + head.next = prev; + prev = head; + head = next; + } + + return prev; + } +}