<?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%3Asbha077</id>
	<title>SE250:lab-6:sbha077 - 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%3Asbha077"/>
	<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-6:sbha077&amp;action=history"/>
	<updated>2026-04-21T14:05:17Z</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:sbha077&amp;diff=7311&amp;oldid=prev</id>
		<title>Mark: 18 revision(s)</title>
		<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-6:sbha077&amp;diff=7311&amp;oldid=prev"/>
		<updated>2008-11-03T05:20:09Z</updated>

		<summary type="html">&lt;p&gt;18 revision(s)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= &amp;#039;&amp;#039;&amp;#039;Lab 6 Report&amp;#039;&amp;#039;&amp;#039; =&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Task 1&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Task 1 was about inserting values into a binary tree and getting the treeSize ( number of elements in the binary tree ) and the treeHeight ( height of the tree ).&lt;br /&gt;
&lt;br /&gt;
The graph of the output is below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;img src=&amp;quot;http://img217.imageshack.us/img217/4210/binarytreezi6.jpg&amp;quot;/&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get this output, the code was as follows:&lt;br /&gt;
	&lt;br /&gt;
 int main ( void ) {&lt;br /&gt;
 &lt;br /&gt;
 	Node *binaryTree;&lt;br /&gt;
 	int treeSize;&lt;br /&gt;
 	int treeHeight;&lt;br /&gt;
 	&lt;br /&gt;
 	for ( treeSize = 0; treeSize &amp;lt;= 500; treeSize++ ) {&lt;br /&gt;
 &lt;br /&gt;
 		binaryTree = makeRandomTree( treeSize );&lt;br /&gt;
 		treeHeight = height( binaryTree );&lt;br /&gt;
 &lt;br /&gt;
 		printf( &amp;quot;treeSize = %d\t\t treeHeight = %d\n&amp;quot;, treeSize, treeHeight );&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
From observation, the treeHeight starts leveling off at ~18 from treeSize ~350 onwards.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Task 2&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
For Task 2 we had to modify the &amp;quot; minimum &amp;quot; and &amp;quot; maximum &amp;quot; functions. The code is as follows:-&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;MINIMUM:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 Node* minimum( Node* node ) {&lt;br /&gt;
 	if ( node == empty ) {&lt;br /&gt;
 		return empty;&lt;br /&gt;
 	}&lt;br /&gt;
 	while ( node-&amp;gt;left != empty ) {&lt;br /&gt;
 		node = node-&amp;gt;left;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	return node;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;MAXIMUM:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Node* maximum( Node* node ) {&lt;br /&gt;
   	if ( node == empty ) {&lt;br /&gt;
 		return empty;&lt;br /&gt;
 	}&lt;br /&gt;
 	while ( node-&amp;gt;right != empty ) {&lt;br /&gt;
 		node = node-&amp;gt;right;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	return node;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
To implement the two functions, the code is as follows:&lt;br /&gt;
&lt;br /&gt;
 int main ( void ) {&lt;br /&gt;
 &lt;br /&gt;
 	Node *binaryTree;&lt;br /&gt;
 	Node *min;&lt;br /&gt;
 	Node *max;&lt;br /&gt;
 &lt;br /&gt;
 	int minKey;&lt;br /&gt;
 	int maxKey;&lt;br /&gt;
 &lt;br /&gt;
 	binaryTree = makeRandomTree( 10 );&lt;br /&gt;
 	min = minimum( binaryTree );&lt;br /&gt;
 	max = maximum( binaryTree );&lt;br /&gt;
 &lt;br /&gt;
 	show_tree( 0, binaryTree );&lt;br /&gt;
 &lt;br /&gt;
 	printf(&amp;quot; minKey = %d\t maxKey = %d\n &amp;quot;, min-&amp;gt;key, max-&amp;gt;key );&lt;br /&gt;
 &lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
After testing this code a bit, I realised that I kept getting value of 41 at the parent node. So I realised that I had to seed the &amp;quot; makeRandomTree &amp;quot; function and modified it by doing the following:&lt;br /&gt;
&lt;br /&gt;
 Node* makeRandomTree( int size ) {&lt;br /&gt;
 &lt;br /&gt;
   Node* root = empty;&lt;br /&gt;
   srand( 100 ); // seed a random function , should be bundled with time to get a different value everytime.&lt;br /&gt;
   while( size-- &amp;gt; 0 )&lt;br /&gt;
     insert( rand( ), &amp;amp;root );&lt;br /&gt;
   return root;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* The function does not seeded randomly everytime, that is one thing that I have yet to figure out.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Task 3&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Task 3 was to modify the &amp;quot; lookup &amp;quot; function to find a particular key in the tree. Its not fully applicable because we have limited numbers in our tree. The functional code is as follows:&lt;br /&gt;
&lt;br /&gt;
 Node* lookup( int key, Node* node ) {&lt;br /&gt;
 	if ( node == empty ) {&lt;br /&gt;
 		return empty;&lt;br /&gt;
 	}&lt;br /&gt;
 	while ( key != node-&amp;gt;key ) {&lt;br /&gt;
 		if ( key &amp;gt; node-&amp;gt;key ) {&lt;br /&gt;
 			node = node-&amp;gt;right;&lt;br /&gt;
 		} else {&lt;br /&gt;
 			node = node-&amp;gt;left;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	return node;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
To implement this function, the following code was written:&lt;br /&gt;
&lt;br /&gt;
 int main ( void ) {&lt;br /&gt;
 &lt;br /&gt;
 	Node *binaryTree;&lt;br /&gt;
 	Node *min;&lt;br /&gt;
 	Node *max;&lt;br /&gt;
 	Node *find;&lt;br /&gt;
 &lt;br /&gt;
 	int minKey;&lt;br /&gt;
 	int maxKey;&lt;br /&gt;
 &lt;br /&gt;
 	binaryTree = makeRandomTree( 5 );&lt;br /&gt;
 	min = minimum( binaryTree );&lt;br /&gt;
 	max = maximum( binaryTree );&lt;br /&gt;
 &lt;br /&gt;
 	show_tree( 0, binaryTree );&lt;br /&gt;
 &lt;br /&gt;
 	printf( &amp;quot;minKey = %d\t maxKey = %d\n&amp;quot;, min-&amp;gt;key, max-&amp;gt;key );&lt;br /&gt;
 &lt;br /&gt;
 	find = lookup ( 41, binaryTree );&lt;br /&gt;
 	if ( find-&amp;gt;key == 41 ) {&lt;br /&gt;
 		printf( &amp;quot;\nFound the value!\n\n&amp;quot; );&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Task 4&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Task 4 was about giving the value of the next and previous nodes in pre-order. The codes are as shown below:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;PRE-ORDER NEXT&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 Node* next_pre( Node* node ) {&lt;br /&gt;
 	if ( node-&amp;gt;left != empty ) {&lt;br /&gt;
 		return node-&amp;gt;left;&lt;br /&gt;
 	} elseif {&lt;br /&gt;
 		return node-&amp;gt;right;&lt;br /&gt;
 	} else {&lt;br /&gt;
 		if ( node-&amp;gt;parent-&amp;gt;right != empty ) {&lt;br /&gt;
 			return node-&amp;gt;parent-&amp;gt;right;&lt;br /&gt;
 	 	} else {&lt;br /&gt;
 			return empty;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;PRE-ORDER PREVIOUS&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 Node* next_pre( Node* node ) {&lt;br /&gt;
 	if ( node-&amp;gt;parent != empty ) {&lt;br /&gt;
 		return node-&amp;gt;left;&lt;br /&gt;
 	  } elseif ( node-&amp;gt;right != empty ) {&lt;br /&gt;
 		return node-&amp;gt;right;&lt;br /&gt;
 	} else {&lt;br /&gt;
 		if ( node-&amp;gt;parent-&amp;gt;right != empty ) {&lt;br /&gt;
 			return node-&amp;gt;parent-&amp;gt;right;&lt;br /&gt;
 		} else {&lt;br /&gt;
 			return empty;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Task 5&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Task 6&amp;#039;&amp;#039;&amp;#039; ==&lt;/div&gt;</summary>
		<author><name>Mark</name></author>
	</entry>
</feed>