LVIV, Ukraine—Ukrainian forces were clearing mines and counting the dead around Kyiv on Saturday following Russian troop withdrawals in recent days, as Moscow shifted military operations to the country’s east.

Russian forces have partially pulled out from a swath of territory northwest of Ukraine’s capital, giving up more than a dozen towns and villages after Ukrainian resistance led to heavy losses.

“They left in their wake a complete disaster and many dangers,” Ukrainian President Volodymyr Zelensky said in an overnight address, referring to the Russians. He added that the region remained unsafe. “Firstly, the bombing might continue. Secondly, they are mining this entire territory,” he said.

Mr. Zelensky said retreating Russian forces had placed mines in houses, laid trip wires and booby-trapped corpses.

The Ukrainian president singled out the cities of Kharkiv and Mariupol as potential targets of renewed attacks. “In the east of our country, the situation remains extremely difficult,” Mr. Zelensky said. “I emphasize once again: Hard battles lie ahead.”

A gas station in the village of Stoyanka near Kyiv.

Photo: sergey dolzhenko/EPA/Shutterstock

The Kyiv regional military administration published a video on Saturday saying Ukrainian armed forces had retaken more than 30 settlements around the capital. Speaking in one of the villages, with charred Russian tanks in the background, the head of the Kyiv military administration, Oleksandr Pavluk, said Ukrainian forces had ambushed a retreating Russian column.

The Ukrainian military is assessing the damage in each town, he said, and emergency services are clearing explosives. “After this, we will give permission to local residents to return,” Mr. Pavluk said.

The body of a Ukrainian photojournalist who went missing while working north of Kyiv nearly three weeks ago was found in the district of Vyshhorod. Maksym Levin died after being shot twice by Russian forces, according to a statement from Ukraine’s prosecutor general. Another photographer who was with him remains unaccounted for.

Members of the Ukrainian government and military differ on what Russian forces will do next.

Mykhailo Podolyak,

an adviser to Ukraine’s president, predicted Russia would seek to avoid a protracted conflict by abandoning all territories except those in the south and east, where it would dig in and position air defenses to minimize losses. “Without heavy weapons, we won’t be able to drive Russian forces out,” he said.

The General Staff of the Ukrainian armed forces said Russian troops are likely to maintain some positions around Kyiv and Chernihiv, a city to the north of the capital, to tie Ukrainian forces down while pressing to complete the takeover of Kherson in the south, as well as Luhansk and Donetsk in the east.

As Russian military units have moved back from Kyiv, a large number of additional troops have passed over the border into northeastern Ukraine, according to Dmytro Zhyvytski, head of the regional military administration in Sumy.

Southeast of Kyiv, Russia fired missiles overnight at the city of Poltava and conducted strikes on industrial facilities in Kremenchuk early Saturday. Dmytro Lunin, head of the Poltava regional military administration, said rescue workers were extinguishing a blaze in Kremenchuk, adding that there were injuries and possibly deaths.

Burned Russian armored vehicles on the outskirts of Kyiv.

Photo: ronaldo schemidt/Agence France-Presse/Getty Images

A local resident in the village of Dmytrivka, near Kyiv.

Photo: sergey dolzhenko/EPA/Shutterstock

The Russian Defense Ministry said its forces had destroyed gasoline and diesel fuel-storage facilities at the Kremenchuk oil refinery, which has supplied Ukrainian troops in central and eastern parts of the country, using high-precision long-range airborne and sea-based weapons.

The strike came after Moscow accused Ukraine of firing missiles at an oil depot in Belgorod, a Russian city 20 miles from the Ukrainian border, in a predawn helicopter raid on Friday. A Russian investigative agency on Saturday said it had opened a criminal case against Ukrainian military personnel, saying they committed a terrorist act by executing the raid.

Fierce fighting continued around the strategic eastern city of Izyum. Russian forces fired three short-range ballistic missiles from Crimea, which was annexed by Moscow in 2014, into the region of Odessa, on the Black Sea coast. The head of Odessa’s regional military administration, Maksym Marchenko, said there were casualties, without distinguishing between military or civilian losses.

In areas they have seized in southern Ukraine, Russian forces have detained local officials and cracked down on resistance to their rule.

A blast shook the town of Enerhodar after residents staged a rally in support of Ukraine on Saturday, singing the national anthem. Russian military units are shutting down communications networks in the town, according to the official Telegram channel of the state enterprise that runs Ukraine’s nuclear-power plants, including one in Enerhodar.

The mayor of Tavriisk in the Kherson region has been missing since Friday, the town council said. The head of the Melitopol district council, Serhiy Priyma, has also been held for more than two weeks, along with five school principals. “We are trying to find out from the occupiers what the demands are for his release, but so far they are not saying anything,” said the head of the Melitopol district military administration Ihor Sudakov.

The towns near Kyiv that were recaptured by Ukrainian forces included Ivankiv, Dymer, Irpin, Bucha, Vorzel and Hostomel, where Russian paratroopers descended on Feb. 24, the first day of the invasion.

“Hostomel has been liberated but is still being shelled and there are many explosives in the area,” said Taras Dumenko, head of the Hostomel village military administration.

Kyiv regional police chief Andriy Niebytov said police and rescue workers were going house to house in Hostomel. “We understand there might be people under the wreckage,” he said. Bodies are being taken to the morgue to establish the cause of death.

Ukrainian lawmaker Olha Vasilevska-Smahliuk said a two-day curfew had been imposed in recaptured towns to conduct mine sweeps, but trucks carrying humanitarian aid would be allowed to enter.

Communications have been restored to Irpin and the nearby village of Romanivka, said a spokeswoman for Vodafone Ukraine.

Speaking in front of the Bucha city council building on Friday, Mayor Anatolii Fedoruk claimed victory over Russian forces there, but officials described widespread damage.

The city council said a confectionery factory in Bucha had been mined by the Russian military before it departed. Oleksandr Bursuk, the head of a linen factory in Dymer, said workers’ clothes and personal effects had been looted, as well as a delivery truck, which he said he tracked to Belarus.

“There is no occupation army in Dymer anymore,” said Mr. Bursuk. “As a farewell, our ‘liberators’ were looting everything they could.”

A family seeks refuge in abandoned apartments of a residential building in Mariupol.

Photo: ALEXANDER ERMOCHENKO/REUTERS

A destroyed building in Kharkiv, Ukraine.

Photo: fadel senna/Agence France-Presse/Getty Images

A man returning to the village of Velyka Dymerka filmed the damage he said Russian forces had inflicted on his house. A flat-screen TV had been stabbed with a saber. In a kennel outside, his dog lay dead, apparently shot. “Why would you kill it?” he said in the video.

As the Russian offensive shifted gears, the U.S. Department of Defense on Friday said it would provide up to an additional $300 million in security assistance to Ukrainian forces.

The package includes laser-guided rocket systems, unmanned aircraft, armored vehicles, night-vision devices, communications systems and ammunition, Pentagon press secretary John Kirby said. Medical supplies, field equipment and spare parts are also included.

The U.S. has supplied more than $1.6 billion in security assistance since Russia’s invasion five weeks ago, he said.

Mariupol, where evacuation efforts have faced complications, remained a locus of tension. Kyrylo Tymoshenko, the deputy head of Mr. Zelensky’s office, said 3,000 people were able to leave the city on Friday. But thousands more civilians remain trapped there, officials said.

A team from the International Committee of the Red Cross heading to Mariupol to assist in civilian evacuations was unable to make it to the city on Friday and would try again on Saturday, the group said. United Nations relief convoys have also failed to reach the city.

The mother of a senior lieutenant mourns his death as solders carry his coffin during his funeral in Lviv, western Ukraine.

Photo: Nariman El-Mofty/Associated Press

Corrections & Amplifications
Taras Dumenko is the head of the Hostomel village military administration, and Dmytro Lunin is the head of the Poltava regional military administration. An earlier version of this article misspelled their last names as Doumenko and Lulin, respectively. (Corrected on April 2.)

Write to Isabel Coles at isabel.coles@wsj.com