Well, you'd not only have to traverse the expression tree: you'd also have to convert final property "getter" you encounter into a property "setter". Essentially you'd want to find the expression which acts as the "target" of the getter (i.e. the object it's going to get the property of), evaluate it to get the target, then find the corresponding setter for the final property, and call it with the target and the new value.
Note that by only requiring the expression tree to represent the "getter", you're losing some of the compile-time safety you might expect... because a caller could pass in a read-only property:
SetValue(c => c.Account.Name.Length, 0); // string.Length is read-only
Another alternative would be to change your code to make the lambda expression represent the setter instead:
SetValue((c, value) => c.Account.Name = value, "Test");
Then you wouldn't even need an expression tree - you could use a simple delegate, and just execute it appropriately.
Unfortunately you haven't really given us enough information about what you're trying to achieve to know whether this is a feasible suggestion.