Index: wp-admin/includes/class-wp-themes-list-table.php
===================================================================
--- wp-admin/includes/class-wp-themes-list-table.php	(revision 18641)
+++ wp-admin/includes/class-wp-themes-list-table.php	(working copy)
@@ -175,7 +175,7 @@
 ?>
 		<a href="<?php echo $preview_link; ?>" class="<?php echo $thickbox_class; ?> screenshot">
 <?php if ( $screenshot ) : ?>
-			<img src="<?php echo $theme_root_uri . '/' . $stylesheet . '/' . $screenshot; ?>" alt="" />
+			<img src="<?php echo esc_url( _get_theme_screenshot_url( $stylesheet_dir, $template_dir, $screenshot ) ); ?>" alt="" />
 <?php endif; ?>
 		</a>
 <h3><?php
Index: wp-admin/themes.php
===================================================================
--- wp-admin/themes.php	(revision 18641)
+++ wp-admin/themes.php	(working copy)
@@ -81,7 +81,7 @@
 <h3><?php _e('Current Theme'); ?></h3>
 <div id="current-theme">
 <?php if ( $ct->screenshot ) : ?>
-<img src="<?php echo $ct->theme_root_uri . '/' . $ct->stylesheet . '/' . $ct->screenshot; ?>" alt="<?php _e('Current theme preview'); ?>" />
+<img src="<?php echo esc_url( _get_theme_screenshot_url( $ct->stylesheet_dir, $ct->template_dir, $ct->screenshot ) ); ?>" alt="<?php _e('Current theme preview'); ?>" />
 <?php endif; ?>
 <h4><?php
 	/* translators: 1: theme title, 2: theme version, 3: theme author */
Index: wp-includes/theme.php
===================================================================
--- wp-includes/theme.php	(revision 18641)
+++ wp-includes/theme.php	(working copy)
@@ -293,14 +293,6 @@
 		$template    = $theme_data['Template'];
 		$stylesheet  = dirname($theme_file);
 
-		$screenshot = false;
-		foreach ( array('png', 'gif', 'jpg', 'jpeg') as $ext ) {
-			if (file_exists("$theme_root/$stylesheet/screenshot.$ext")) {
-				$screenshot = "screenshot.$ext";
-				break;
-			}
-		}
-
 		if ( empty($name) ) {
 			$name = dirname($theme_file);
 			$title = $name;
@@ -393,6 +385,14 @@
 		if ( empty($stylesheet_dir) )
 			$stylesheet_dir = '/';
 
+		$screenshot = false;
+		foreach ( array('png', 'gif', 'jpg', 'jpeg') as $ext ) {
+			if ( file_exists("$stylesheet_dir/screenshot.$ext") || file_exists("$template_dir/screenshot.$ext") ) {
+				$screenshot = "screenshot.$ext";
+				break;
+			}
+		}
+
 		// Check for theme name collision.  This occurs if a theme is copied to
 		// a new theme directory and the theme header is not updated.  Whichever
 		// theme is first keeps the name.  Subsequent themes get a suffix applied.
@@ -1989,4 +1989,23 @@
 
 add_action( 'delete_attachment', '_delete_attachment_theme_mod' );
 
+/**
+ * Retrieve screenshot URL for a theme.
+ *
+ * If a child theme screenshot is missing, the one from a parent theme is used.
+ *
+ * @access private
+ * @since 3.3.0
+ */
+function _get_theme_screenshot_url( $stylesheet_dir, $template_dir, $screenshot ) {
+	$screenshot_url = false;
+
+	if ( file_exists("$stylesheet_dir/$screenshot") )
+		$screenshot_url = str_replace( WP_CONTENT_DIR, content_url(), "$stylesheet_dir/$screenshot" );
+	elseif ( file_exists("$template_dir/$screenshot") )
+		$screenshot_url = str_replace( WP_CONTENT_DIR, content_url(), "$template_dir/$screenshot" );
+
+	return $screenshot_url;
+}
+
 ?>
