To write this article I was using this answer.

XAML:

<Window x:Class="TreeViewMouseOverExpand.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:viewModel="clr-namespace:TreeViewMouseOverExpand.ViewModel"
        xmlns:treeViewModel="clr-namespace:TreeViewMouseOverExpand.Model"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.Resources>
            <viewModel:TreeViewMouseOverExpandViewModel x:Key="TreeViewMouseOverExpandViewModel" />
        </Grid.Resources>
        
        <TreeView DataContext="{StaticResource TreeViewMouseOverExpandViewModel}" ItemsSource="{Binding TreeViewMouseOverExpandItems}">
            <TreeView.ItemTemplate>

                <HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="{x:Type treeViewModel:TreeViewMouseOverExpandModel}">
                    <TreeViewItem Header="{Binding Name}"/>
                </HierarchicalDataTemplate>

            </TreeView.ItemTemplate>

            <TreeView.ItemContainerStyle>
                <Style TargetType="{x:Type TreeViewItem}">
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="IsExpanded" Value="True" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TreeView.ItemContainerStyle>

        </TreeView>
    </Grid>
</Window>

Thing which you have to notice is:

<TreeView.ItemContainerStyle>
	<Style TargetType="{x:Type TreeViewItem}">
		<Style.Triggers>
			<Trigger Property="IsMouseOver" Value="True">
				<Setter Property="IsExpanded" Value="True" />
			</Trigger>
		</Style.Triggers>
	</Style>
</TreeView.ItemContainerStyle>

 Here you can download example.