public List<String> binaryTreePaths2(TreeNode root) {
        List<String> res = new LinkedList<>();
        if (root == null) return res;
        Queue<TreeNode> q1 = new LinkedList<>();
        Queue<String> q2 = new LinkedList<>() ;
        q1.add(root); q2.add(root.val + "");
        while (!q1.isEmpty() && !q2.isEmpty()) {
            TreeNode n = q1.remove();
            String path = q2.remove();
            if (n.left != null) {
                q1.add(n.left);
                q2.add(path + "->" + n.left.val);
            }
            if (n.right != null) {
                q1.add(n.right);
                q2.add(path + "->" + n.right.val);
            }
            if (n.left == null && n.right == null) res.add(path);
        }
        return res;
    }