[Java] Two pass | Clean solution | 100% / 98%
1) Get the height of the deepest node\n2) Start returning the deepest node\n3) For those who are not the deepest nodes return null from them\n4) if left and rig
1) Get the height of the deepest node\n2) Start returning the deepest node\n3) For those who are not the deepest nodes return null from them\n4) if left and right subtree of a certain node returned the deepest nodes then return(propagate) the node itself\n5) if left subtree returned deepest node but right subtree returned null, propagate the deepest node(left) further\n6) if right subtree returned deepest node but left subtree returned null, propagate the deepest node(right) further\n```\nclass Solution {\n    \n    int getHeight(TreeNode root){\n        if(root == null) return 0;\n        int left = getHeight(root.left)+1;\n        int right = getHeight(root.right)+1;\n        return Math.max(left,right);\n    }\n    \n    TreeNode getNode(TreeNode root,int h, int H){\n        if(root == null) return null;\n        if(h == H) return root;\n        TreeNode left = getNode(root.left,h+1,H);\n        TreeNode right = getNode(root.right,h+1,H);\n        if(left != null && right != null) return root; \n        return left != null ? left : right; \n    }\n    \n    public TreeNode subtreeWithAllDeepest(TreeNode root) {\n        return getNode(root,1,getHeight(root));\n    }\n}\n```
['Java']