Who is the rightful ruler?
PHP, 664 bytes

I'm not sure if 664 bytes fit for code golfing, but here it is:

$k=json_decode($argv[1]);$s=[];$f='array_shift';$r='heirs';$e='death';$y='year';function s
($k,&amp;$e){uasort($e,function($a,$b)use($k){$c=$a-&gt;{$h='house'};$d=$b-&gt;$h;$e=$k-&gt;$h;if($c==$e
&amp;&amp;$d!=$e)return-1;elseif($c!=$e&amp;&amp;$d==$e)return 1;elseif($a-&gt;sex&lt;$b-&gt;sex)return 1;elseif($a
-&gt;sex&gt;$b-&gt;sex)return -1;else return$a-&gt;birth-$b-&gt;birth;});}function d(&amp;$e,$y){foreach($e 
as$i=&gt;$h)if($h-&gt;death&lt;=$y)unset($e[$i]);};($x=(array)$k)&amp;&amp;$k-&gt;$y=$k-&gt;birth;$l=[];while($x)
{$l[]=$k;$z=$k-&gt;$e;s($k,$k-&gt;$r);d($k-&gt;$r,$k-&gt;$e);if($k-&gt;$r){$s=$k-&gt;$r;$k=$f($s);}else{s($k
,$s);d($s,$k-&gt;$e);$k=$f($s);}if(!$k)break;$k-&gt;$y=$z;}foreach($l as$k)
echo"{$k-&gt;$y}-{$k-&gt;$e}: $k-&gt;name, ";echo"LINE EXTINCT";


It receives the JSON string input as the first command line argument.

The algorithm follows the steps described in the challenge (starts from the king, then sorts the heirs and then the siblings to find the next king).

Demo