How does restoring an HD wallet work? I was trying to learn working of bitcoin and trying to understand the working of bitcoin wallet.

I can see the behavior of how an HD wallet starts with an address and adds additional addresses later for receiving bitcoin. 

I read bip-0032, but still am  confused. If I regenerate a wallet from the seed (in another mobile phone), how the system will populate the wallet with all previous addresses containing a balance? Will it try to download the earlier blockchain and search it, or is there another way?

How do we locate a list of all addresses we created with the HD wallet? How can we verify the balance of those addresses?

I know that this question is going to receive down votes, please give me some ideas. 

Also it would be helpful if somebody can share some links where I could get some help on clarifying doubts (not programming, general working).
The seed derivation works by increasing a "nonce" and deriving an address from that. So, by example, if we pretend that we have 1234 as our seed, then we could increase that seed by 1 for each address derivation. If we use a simple sha256 hash of that as our private key, then we get the following addresses:

NonceFinal SeedAddress                           
    0      12341B3PHXB6g5YGLvzTkxrrPEdLbpvfEoC5Qi
    1      12351NxaF9cYPL53fNTHMN6wtmq1w8bmHEe3gp
    2      12361DPF9wFiuFowUK4NwJdbd2W9L59bPPnWNM
    3      123713ehhpMndUoh5E4QcHJ7QSWwuKC7ySpxrL
    4      123817CF5qesU9KXBHAsa9tEz1126kqSDy56tC
    5      12391MfTGTiszztzzjzKajvS1Wc3TznqpfyPh7
    6      124016t3QqxUVssdTAYUibdY8K4aCFYsP6pUWE

This is obviously oversimplified, and not the derivation that is used in most BIP32 implementations. As to how they are restored, you simply keep deriving addresses until you hit a bunch in a row that are unused. This is called a lookup gap, and is normally configurable.