<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.kram.nz/index.php?action=history&amp;feed=atom&amp;title=SE250%3Alab-6%3Ahpan027</id>
	<title>SE250:lab-6:hpan027 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.kram.nz/index.php?action=history&amp;feed=atom&amp;title=SE250%3Alab-6%3Ahpan027"/>
	<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-6:hpan027&amp;action=history"/>
	<updated>2026-04-28T09:29:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.kram.nz/index.php?title=SE250:lab-6:hpan027&amp;diff=7128&amp;oldid=prev</id>
		<title>Mark: 19 revision(s)</title>
		<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-6:hpan027&amp;diff=7128&amp;oldid=prev"/>
		<updated>2008-11-03T05:20:05Z</updated>

		<summary type="html">&lt;p&gt;19 revision(s)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Task One ==&lt;br /&gt;
&lt;br /&gt;
 newTree = makeRandomTree(i);&lt;br /&gt;
 printf(&amp;quot;%d\n&amp;quot;, i);&lt;br /&gt;
&lt;br /&gt;
*Data was collected using a loop&lt;br /&gt;
*At first a arbitrary large number is used to get a rough idea of the relationship&lt;br /&gt;
 for( i = 1; i &amp;lt; 10000; i *= 10 )&lt;br /&gt;
*However it seems like the height does not vary much when dealing with larger numbers&lt;br /&gt;
*Hence backtrack to get results for smaller tree sizes&lt;br /&gt;
 for( i = 1; i &amp;lt; 100; i++ )&lt;br /&gt;
*Plotted result using excel - relationship seems to be logarithmic&lt;br /&gt;
&lt;br /&gt;
== Task Two ==&lt;br /&gt;
&lt;br /&gt;
 while ( node-&amp;gt;left != empty )&lt;br /&gt;
 	node = node-&amp;gt;left;&lt;br /&gt;
 return node;&lt;br /&gt;
&lt;br /&gt;
*The minimum value of a tree resides in the leftmost node&lt;br /&gt;
&lt;br /&gt;
 while ( node-&amp;gt;right != empty )&lt;br /&gt;
 	node = node-&amp;gt;right;&lt;br /&gt;
 return node;&lt;br /&gt;
&lt;br /&gt;
*Like minimum except to the right&lt;br /&gt;
&lt;br /&gt;
== Task Three ==&lt;br /&gt;
&lt;br /&gt;
 Node* lookup( int key, Node* node ) {&lt;br /&gt;
     while ( node != empty ) {&lt;br /&gt;
 		if( key &amp;lt; node-&amp;gt;key)&lt;br /&gt;
 			node = node-&amp;gt;left;&lt;br /&gt;
 		if( key &amp;gt; node-&amp;gt;key)&lt;br /&gt;
 			node = node-&amp;gt;right;&lt;br /&gt;
 		else return node;&lt;br /&gt;
     }&lt;br /&gt;
    return empty;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Task Four ==&lt;br /&gt;
&lt;br /&gt;
 if( node == empty ) //empty tree&lt;br /&gt;
 	return empty;&lt;br /&gt;
 &lt;br /&gt;
 if( node-&amp;gt;left == empty &amp;amp;&amp;amp; node-&amp;gt;right == empty ) { //case for leaf&lt;br /&gt;
 	while( node-&amp;gt;parent != empty) { //backtrack&lt;br /&gt;
 	    if( node == node-&amp;gt;parent-&amp;gt;left &amp;amp;&amp;amp; node-&amp;gt;parent-&amp;gt;right != empty)&lt;br /&gt;
 		return node-&amp;gt;parent-&amp;gt;right;&lt;br /&gt;
 	     node = node-&amp;gt;parent;&lt;br /&gt;
 	}&lt;br /&gt;
 	return empty;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 else { //case for parent/root&lt;br /&gt;
 	if( node-&amp;gt;left != empty)&lt;br /&gt;
 	    return node-&amp;gt;left;&lt;br /&gt;
 	return node-&amp;gt;right; //else&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
*Took a while due to several incorrect solutions which assumed every parent had 2 child&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 if( node == empty ) //empty tree&lt;br /&gt;
 	return empty;&lt;br /&gt;
 &lt;br /&gt;
 while( node-&amp;gt;parent != empty ) {&lt;br /&gt;
 	if( node == node-&amp;gt;parent-&amp;gt;left)&lt;br /&gt;
 	    return node-&amp;gt;parent;&lt;br /&gt;
 	else { //if right&lt;br /&gt;
 	    if( node-&amp;gt;parent-&amp;gt;left == empty)&lt;br /&gt;
 		return node-&amp;gt;parent;&lt;br /&gt;
 	    node = node-&amp;gt;parent-&amp;gt;left;&lt;br /&gt;
 	    while( node-&amp;gt;left != empty || node-&amp;gt;right != empty ) { //find the last value in the left subtree&lt;br /&gt;
 		if( node-&amp;gt;right == empty )&lt;br /&gt;
 		    node = node-&amp;gt;left;&lt;br /&gt;
 		node = node-&amp;gt;right;&lt;br /&gt;
 	    }&lt;br /&gt;
 	    return node;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 return empty;&lt;br /&gt;
&lt;br /&gt;
*Phew&lt;br /&gt;
&lt;br /&gt;
== Task five ==&lt;br /&gt;
&lt;br /&gt;
 if( node-&amp;gt;left == empty &amp;amp;&amp;amp; node-&amp;gt;right == empty ) { //leaf&lt;br /&gt;
 	while(node-&amp;gt;parent != empty) { &lt;br /&gt;
 	    if( node == node-&amp;gt;parent-&amp;gt;left ) &lt;br /&gt;
 		return node-&amp;gt;parent;&lt;br /&gt;
 	    node = node-&amp;gt;parent;&lt;br /&gt;
 	}&lt;br /&gt;
 	return empty;&lt;br /&gt;
 }&lt;br /&gt;
     &lt;br /&gt;
 else { //parent&lt;br /&gt;
 	if( node-&amp;gt;right != empty)&lt;br /&gt;
 	    return minimum(node-&amp;gt;right);&lt;br /&gt;
 	return node-&amp;gt;parent;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Task six ==&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;math.h&amp;gt;&lt;br /&gt;
     int height = ceil( log( n + 1 ) / log( 2 ) - 1 );&lt;br /&gt;
     Node* newTree = mkNode( pow(2, height), empty );&lt;br /&gt;
     int i,j;&lt;br /&gt;
     i = height - 1;&lt;br /&gt;
     while( i &amp;gt;= 0 ) {&lt;br /&gt;
 	j = 0;&lt;br /&gt;
 	while( pow(2, i) + j * pow(2, (i+1)) &amp;lt; n ) {&lt;br /&gt;
 	    insert( pow(2, i) + j * pow(2, (i+1)), &amp;amp;newTree );&lt;br /&gt;
 	    j++;&lt;br /&gt;
 	}&lt;br /&gt;
 	i--;&lt;br /&gt;
     }&lt;br /&gt;
     return newTree;&lt;br /&gt;
&lt;br /&gt;
*Note that this code does not give a well balanced tree, but does give the minimum height possible&lt;/div&gt;</summary>
		<author><name>Mark</name></author>
	</entry>
</feed>