But how would you find the specified adderss with balance >0 ? What's way to find it ?
Most wallets use standard derivation paths.
m/44'/0'/0' is usually used for generating legacy addresses and the first receiving legacy address is generated at m/44'/0'/0'/0/0
m/49'/0'/0' is usually used for generating nested segwit addresses and the first receiving nested segwit address is generated at m/49'/0'/0'/0/0
m/84'/0'/0' is usually used for generating native segwit addresses and the first receiving native segwit address is generated at m/84'/0'/0'/0/0
For example, if you import a BIP39 seed phrase in electrum (without changing the derivation path) to generate a native segwit wallet, by default it gives you 20 receiving addresses and 10 change addresses.
The 20 receiving addresses would be generated at m/84'/0'/0'/0/0 - m/84'/0'/0'/0/19 and the 10 change addresses would be generated at m/84'/0'/0'/1/0 - m/84'/0'/0'/1/19
In the case you have generated your addresses using a non-standard derivation path for any reason, you need to know the derivation path as well and you still don't need to save individual private keys.