<?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%3Adcho040</id>
	<title>SE250:lab-6:dcho040 - 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%3Adcho040"/>
	<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-6:dcho040&amp;action=history"/>
	<updated>2026-04-28T17:33:16Z</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:dcho040&amp;diff=7072&amp;oldid=prev</id>
		<title>Mark: 12 revision(s)</title>
		<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-6:dcho040&amp;diff=7072&amp;oldid=prev"/>
		<updated>2008-11-03T05:20:04Z</updated>

		<summary type="html">&lt;p&gt;12 revision(s)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Code==&lt;br /&gt;
===tree.h===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
  File:    tree.h&lt;br /&gt;
  Date:    3 April 2007 (last modified by Mark Wilson 5 May 2008)&lt;br /&gt;
  Author:  John Hamer (trivial modifications by Mark Wilson)&lt;br /&gt;
  Purpose: Code resource for SOFTENG 250 lab #6&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
typedef&lt;br /&gt;
struct Node {&lt;br /&gt;
  int key;&lt;br /&gt;
  struct Node *left;&lt;br /&gt;
  struct Node *right;&lt;br /&gt;
  struct Node *parent;		/* ADDED */&lt;br /&gt;
} Node;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Node *mkNode( int key, Node* parent );&lt;br /&gt;
void insert( int key, Node **node );&lt;br /&gt;
void show_tree( int level, Node* node );&lt;br /&gt;
Node* minimum( Node* node );&lt;br /&gt;
Node* maximum( Node* node );&lt;br /&gt;
Node* lookup( int key, Node* node );&lt;br /&gt;
Node* next_pre( Node* node );&lt;br /&gt;
Node* prev_pre( Node* node );&lt;br /&gt;
Node* next_in( Node* node );&lt;br /&gt;
Node* prev_in( Node* node );&lt;br /&gt;
Node* next_post( Node* node );&lt;br /&gt;
Node* prev_post( Node* node );&lt;br /&gt;
Node* insertMinHeight( int n);&lt;br /&gt;
Node* makeRandomTree( int size );&lt;br /&gt;
int Max( int x, int y );&lt;br /&gt;
int height( Node* node );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===tree.c===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
  File:    tree.c&lt;br /&gt;
  Date:    3 April 2007 (last modified by Mark Wilson 5 May 2008)&lt;br /&gt;
  Author:  John Hamer (trivial modifications by Mark Wilson)&lt;br /&gt;
  Purpose: Code resource for SOFTENG 250 lab #6&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;quot;tree.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Node *empty = (Node*)0, *before; /* pointer to &amp;quot;external node&amp;quot; */&lt;br /&gt;
int search = 1, compareKey=-1;&lt;br /&gt;
&lt;br /&gt;
Node *mkNode( int key, Node* parent ) {	/* CHANGED */&lt;br /&gt;
  Node *newn = (Node*)malloc( sizeof(Node) );&lt;br /&gt;
  if( ! newn ) {&lt;br /&gt;
    fprintf( stderr, &amp;quot;! Out of memory\n&amp;quot; );&lt;br /&gt;
    exit( 1 );&lt;br /&gt;
  }&lt;br /&gt;
  newn-&amp;gt;key    = key;&lt;br /&gt;
  newn-&amp;gt;left   = empty;&lt;br /&gt;
  newn-&amp;gt;right  = empty;&lt;br /&gt;
  newn-&amp;gt;parent = parent;	/* ADDED */&lt;br /&gt;
  return newn;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* CHANGED */&lt;br /&gt;
void insert( int key, Node **node ) {&lt;br /&gt;
  Node* parent = empty;&lt;br /&gt;
  while( *node != empty ) {&lt;br /&gt;
    parent = *node;&lt;br /&gt;
    if( key &amp;lt; (*node)-&amp;gt;key )&lt;br /&gt;
      node = &amp;amp;(*node)-&amp;gt;left;&lt;br /&gt;
    else&lt;br /&gt;
      node = &amp;amp;(*node)-&amp;gt;right;&lt;br /&gt;
  }&lt;br /&gt;
  *node = mkNode( key, parent );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void show_tree( int level, Node* node ) {&lt;br /&gt;
  if( node == empty )&lt;br /&gt;
    return;&lt;br /&gt;
&lt;br /&gt;
  show_tree( level+1, node-&amp;gt;left );&lt;br /&gt;
  printf( &amp;quot;%*s%d [%d]\n&amp;quot;, level*2, &amp;quot;&amp;quot;, node-&amp;gt;key, level );&lt;br /&gt;
  show_tree( level+1, node-&amp;gt;right );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Node* minimum( Node* node ) {&lt;br /&gt;
  if ((node == empty) | (node-&amp;gt;left == empty))&lt;br /&gt;
    return node;&lt;br /&gt;
  return minimum(node-&amp;gt;left);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node* maximum( Node* node ) {&lt;br /&gt;
  if ((node == empty) | (node-&amp;gt;right == empty))&lt;br /&gt;
    return node;&lt;br /&gt;
  return maximum(node-&amp;gt;right);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node* lookup( int key, Node* node ) {&lt;br /&gt;
  while (node != empty) {&lt;br /&gt;
    compareKey = key - node-&amp;gt;key;&lt;br /&gt;
    if (!compareKey)&lt;br /&gt;
      return node;&lt;br /&gt;
    if (compareKey &amp;gt; 0)&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;
  return empty;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node* next_pre( Node* node ) {&lt;br /&gt;
  if (node != empty) {&lt;br /&gt;
    if (node-&amp;gt;left != empty)&lt;br /&gt;
      return node-&amp;gt;left;&lt;br /&gt;
    before = empty;&lt;br /&gt;
    while (node != empty) {&lt;br /&gt;
      if ((node-&amp;gt;right != empty) &amp;amp;&amp;amp; (node-&amp;gt;right != before))&lt;br /&gt;
	return node-&amp;gt;right;&lt;br /&gt;
      before = node;&lt;br /&gt;
      node = node-&amp;gt;parent;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  return empty;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node* prev_pre( Node* node ) {&lt;br /&gt;
  if ((node == empty) || (node-&amp;gt;parent == empty))&lt;br /&gt;
    return empty;&lt;br /&gt;
  if (((node-&amp;gt;parent)-&amp;gt;left == node) | ((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;
  search = 1;&lt;br /&gt;
  while (search){&lt;br /&gt;
    if (node-&amp;gt;right != empty)&lt;br /&gt;
      node = node-&amp;gt;right;&lt;br /&gt;
    else if (node-&amp;gt;left != empty)&lt;br /&gt;
      node = node-&amp;gt;left;&lt;br /&gt;
    else&lt;br /&gt;
      search = 0;&lt;br /&gt;
  }&lt;br /&gt;
  return node;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node* next_in( Node* node ) {&lt;br /&gt;
  if (node == empty)&lt;br /&gt;
    return empty;&lt;br /&gt;
  if (node-&amp;gt;right != empty) {&lt;br /&gt;
    node = node-&amp;gt;right;&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;
  do {&lt;br /&gt;
    before = node;&lt;br /&gt;
    node = node-&amp;gt;parent;&lt;br /&gt;
    if (node == empty)&lt;br /&gt;
      return empty;&lt;br /&gt;
  } while (node-&amp;gt;left != before);&lt;br /&gt;
  return node;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node* prev_in( Node* node ) {&lt;br /&gt;
  if (node == empty)&lt;br /&gt;
    return empty;&lt;br /&gt;
  if (node-&amp;gt;left != empty) {&lt;br /&gt;
    node = node-&amp;gt;left;&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;
  do{&lt;br /&gt;
    before = node;&lt;br /&gt;
    node = node-&amp;gt;parent;&lt;br /&gt;
    if (node == empty)&lt;br /&gt;
      return empty;&lt;br /&gt;
  } while (node-&amp;gt;left == before);&lt;br /&gt;
  return node;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node* next_post( Node* node ) {&lt;br /&gt;
  if ((node == empty) || (node-&amp;gt;parent == empty))&lt;br /&gt;
    return empty;&lt;br /&gt;
  before = node;&lt;br /&gt;
  node = node-&amp;gt;parent;&lt;br /&gt;
  if ((node-&amp;gt;right == before) | (node-&amp;gt;right == empty))&lt;br /&gt;
    return node;&lt;br /&gt;
  node = node-&amp;gt;right;&lt;br /&gt;
  search = 1;&lt;br /&gt;
  while(search) {&lt;br /&gt;
    if (node-&amp;gt;left != empty)&lt;br /&gt;
      node = node-&amp;gt;left;&lt;br /&gt;
    else if (node-&amp;gt;right != empty)&lt;br /&gt;
      node = node-&amp;gt;right;&lt;br /&gt;
    else&lt;br /&gt;
      search = 0;&lt;br /&gt;
  }&lt;br /&gt;
  return node;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node* prev_post( Node* node ) {&lt;br /&gt;
  if (node == empty)&lt;br /&gt;
    return node;&lt;br /&gt;
  if (node-&amp;gt;right != empty)&lt;br /&gt;
    return node-&amp;gt;right;&lt;br /&gt;
  do {&lt;br /&gt;
    if (node-&amp;gt;left != empty)&lt;br /&gt;
      return node-&amp;gt;left;&lt;br /&gt;
    before = node;&lt;br /&gt;
    node = node-&amp;gt;parent;&lt;br /&gt;
    if (node == empty)&lt;br /&gt;
      return empty;&lt;br /&gt;
  } while(node-&amp;gt;right == before);&lt;br /&gt;
  do{&lt;br /&gt;
    before = node;&lt;br /&gt;
    node = node-&amp;gt;parent;&lt;br /&gt;
    if (node == empty)&lt;br /&gt;
      return empty;&lt;br /&gt;
  } while (node-&amp;gt;left == before);&lt;br /&gt;
  if (node-&amp;gt;left != empty)&lt;br /&gt;
    return node-&amp;gt;left;&lt;br /&gt;
  return node;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node* insertMinHeight( int n) {&lt;br /&gt;
  if (n &amp;lt; 1){&lt;br /&gt;
    printf(&amp;quot;n should be a integer bigger than 0&amp;quot;);&lt;br /&gt;
    return empty;&lt;br /&gt;
  }&lt;br /&gt;
  Node *root = empty;&lt;br /&gt;
  bestTree(1, n, &amp;amp;root);&lt;br /&gt;
  return root;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bestTree(int start, int end, Node **root) {  &lt;br /&gt;
  if (start == end) {&lt;br /&gt;
    insert(start, root);&lt;br /&gt;
    return ;&lt;br /&gt;
  }&lt;br /&gt;
  if (start+1 == end) {&lt;br /&gt;
    insert(start, root);&lt;br /&gt;
    insert(end, root);&lt;br /&gt;
    return ;&lt;br /&gt;
  }&lt;br /&gt;
  int middle = (start + end) / 2;&lt;br /&gt;
  insert(middle, root);&lt;br /&gt;
  bestTree(start, middle-1, root);&lt;br /&gt;
  bestTree(middle+1, end, root);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node* makeRandomTree( int size ) {&lt;br /&gt;
  Node* root = empty;&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;
int Max( int x, int y ) {&lt;br /&gt;
  if( x &amp;gt; y )&lt;br /&gt;
    return x;&lt;br /&gt;
  else&lt;br /&gt;
    return y;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Length of the longest path from node to a leaf */&lt;br /&gt;
int height( Node* node ) {&lt;br /&gt;
  if( node == empty )&lt;br /&gt;
    return 0;&lt;br /&gt;
  else&lt;br /&gt;
    return Max( height( node-&amp;gt;left ),&lt;br /&gt;
		height( node-&amp;gt;right ) ) + 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===lab6.c===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include&amp;quot;tree.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  Node *test, *maxNode, *minNode, *lookedNode;&lt;br /&gt;
  int heightTree, i;&lt;br /&gt;
  Node *empty = (Node*)0;  &lt;br /&gt;
&lt;br /&gt;
  //task 1&lt;br /&gt;
  printf(&amp;quot;\ntask1\n&amp;quot;);&lt;br /&gt;
  for (i = 1; i &amp;lt;= 20; i++) {&lt;br /&gt;
    test = makeRandomTree( i*50 );&lt;br /&gt;
    heightTree = height( test );&lt;br /&gt;
    printf(&amp;quot;inputs height: %d %d\n&amp;quot;,i*50, heightTree);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  //task 2&lt;br /&gt;
  printf(&amp;quot;\ntask2\n&amp;quot;);&lt;br /&gt;
  test = makeRandomTree(10);&lt;br /&gt;
  printf(&amp;quot;show_tree\n&amp;quot;);&lt;br /&gt;
  show_tree(1, test);&lt;br /&gt;
&lt;br /&gt;
  minNode = minimum(test);&lt;br /&gt;
  maxNode = maximum(test);&lt;br /&gt;
  printf(&amp;quot;minimum: %d\n&amp;quot;,minNode-&amp;gt;key);&lt;br /&gt;
  printf(&amp;quot;maximum: %d\n&amp;quot;,maxNode-&amp;gt;key);&lt;br /&gt;
&lt;br /&gt;
  //task 3&lt;br /&gt;
  printf(&amp;quot;\ntask3\n&amp;quot;);&lt;br /&gt;
  lookedNode = lookup(maxNode-&amp;gt;key, test);&lt;br /&gt;
  printf(&amp;quot;find maxNode&amp;#039;s key from task3\n&amp;quot;&lt;br /&gt;
	 &amp;quot;So two addresses should be the same\n&amp;quot;&lt;br /&gt;
	 &amp;quot;maxNode&amp;#039;s address: %p \nlookedNod&amp;#039;s address: %p\n&amp;quot;&lt;br /&gt;
	 , maxNode, lookedNode);&lt;br /&gt;
  &lt;br /&gt;
  lookedNode = lookup(10, test);&lt;br /&gt;
  printf(&amp;quot;looked the key not in the tree : %p\n&amp;quot;,lookedNode);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //task 4 &amp;amp; 5&lt;br /&gt;
  printf(&amp;quot;\ntask4&amp;amp;5\n&amp;quot;);&lt;br /&gt;
  printf(&amp;quot;test model\n&amp;quot;&lt;br /&gt;
	 &amp;quot;      10\n&amp;quot;&lt;br /&gt;
	 &amp;quot;  3        13\n&amp;quot;&lt;br /&gt;
	 &amp;quot;2   7   12    15\n&amp;quot;&lt;br /&gt;
	 &amp;quot;   6 9      14\n&amp;quot;&lt;br /&gt;
	 &amp;quot;  4\n&amp;quot;&lt;br /&gt;
	 &amp;quot;   5\n&amp;quot;);&lt;br /&gt;
  Node *root = empty;&lt;br /&gt;
  insert( 10, &amp;amp;root );&lt;br /&gt;
  insert( 3, &amp;amp;root );&lt;br /&gt;
  insert( 13, &amp;amp;root );&lt;br /&gt;
  insert( 2, &amp;amp;root );&lt;br /&gt;
  insert( 7, &amp;amp;root );&lt;br /&gt;
  insert( 12, &amp;amp;root );&lt;br /&gt;
  insert( 15, &amp;amp;root );&lt;br /&gt;
  insert( 6, &amp;amp;root );&lt;br /&gt;
  insert( 9, &amp;amp;root );&lt;br /&gt;
  insert( 14, &amp;amp;root );&lt;br /&gt;
  insert( 4, &amp;amp;root );&lt;br /&gt;
  insert( 5, &amp;amp;root );&lt;br /&gt;
  Node *nowNode = root;&lt;br /&gt;
  printf(&amp;quot;next_pre\n&amp;quot;);&lt;br /&gt;
  while (nowNode != empty) {&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;,(nowNode-&amp;gt;key));&lt;br /&gt;
    nowNode = next_pre(nowNode);&lt;br /&gt;
  }&lt;br /&gt;
  printf(&amp;quot;prev_pre\n&amp;quot;);&lt;br /&gt;
  nowNode = lookup(14,root);&lt;br /&gt;
  while (nowNode != empty) {&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;,(nowNode-&amp;gt;key));&lt;br /&gt;
    nowNode = prev_pre(nowNode);&lt;br /&gt;
  }&lt;br /&gt;
  printf(&amp;quot;next_in\n&amp;quot;);&lt;br /&gt;
  nowNode = lookup(2,root);&lt;br /&gt;
  while (nowNode != empty) {&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;,(nowNode-&amp;gt;key));&lt;br /&gt;
    nowNode = next_in(nowNode);&lt;br /&gt;
  }&lt;br /&gt;
  printf(&amp;quot;prev_in\n&amp;quot;);&lt;br /&gt;
  nowNode = lookup(15,root);&lt;br /&gt;
  while (nowNode != empty) {&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;,(nowNode-&amp;gt;key));&lt;br /&gt;
    nowNode = prev_in(nowNode);&lt;br /&gt;
  }&lt;br /&gt;
  printf(&amp;quot;next_post\n&amp;quot;);&lt;br /&gt;
  nowNode = lookup(2,root);&lt;br /&gt;
  while (nowNode != empty) {&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;,(nowNode-&amp;gt;key));&lt;br /&gt;
    nowNode = next_post(nowNode);&lt;br /&gt;
  }&lt;br /&gt;
  printf(&amp;quot;prev_post\n&amp;quot;);&lt;br /&gt;
  nowNode = root;&lt;br /&gt;
  while (nowNode != empty) {&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;,(nowNode-&amp;gt;key));&lt;br /&gt;
    nowNode = prev_post(nowNode);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  //task 6&lt;br /&gt;
  printf(&amp;quot;\ntask6\n&amp;quot;);&lt;br /&gt;
  test = insertMinHeight( 127 );&lt;br /&gt;
  printf(&amp;quot;insert 1 to 63 =&amp;gt; height should be 7 : %d&amp;quot;, height(test));&lt;br /&gt;
  return 0;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===result===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
task1&lt;br /&gt;
inputs height: 50 9&lt;br /&gt;
inputs height: 100 11&lt;br /&gt;
inputs height: 150 14&lt;br /&gt;
inputs height: 200 17&lt;br /&gt;
inputs height: 250 17&lt;br /&gt;
inputs height: 300 20&lt;br /&gt;
inputs height: 350 20&lt;br /&gt;
inputs height: 400 18&lt;br /&gt;
inputs height: 450 18&lt;br /&gt;
inputs height: 500 22&lt;br /&gt;
inputs height: 550 17&lt;br /&gt;
inputs height: 600 17&lt;br /&gt;
inputs height: 650 20&lt;br /&gt;
inputs height: 700 21&lt;br /&gt;
inputs height: 750 20&lt;br /&gt;
inputs height: 800 22&lt;br /&gt;
inputs height: 850 19&lt;br /&gt;
inputs height: 900 22&lt;br /&gt;
inputs height: 950 24&lt;br /&gt;
inputs height: 1000 25&lt;br /&gt;
&lt;br /&gt;
task2&lt;br /&gt;
show_tree&lt;br /&gt;
      275604784 [3]&lt;br /&gt;
        316933620 [4]&lt;br /&gt;
          506157045 [5]&lt;br /&gt;
    517422363 [2]&lt;br /&gt;
        954301386 [4]&lt;br /&gt;
      1607502745 [3]&lt;br /&gt;
        1636059385 [4]&lt;br /&gt;
  1852094467 [1]&lt;br /&gt;
      1903092272 [3]&lt;br /&gt;
    2011631455 [2]&lt;br /&gt;
minimum: 275604784&lt;br /&gt;
maximum: 2011631455&lt;br /&gt;
&lt;br /&gt;
task3&lt;br /&gt;
find maxNode&amp;#039;s key from task3&lt;br /&gt;
So two addresses should be the same&lt;br /&gt;
maxNode&amp;#039;s address: 0x80888b0 &lt;br /&gt;
lookedNod&amp;#039;s address: 0x80888b0&lt;br /&gt;
looked the key not in the tree : (nil)&lt;br /&gt;
&lt;br /&gt;
task4&amp;amp;5&lt;br /&gt;
test model&lt;br /&gt;
      10&lt;br /&gt;
  3        13&lt;br /&gt;
2   7   12    15&lt;br /&gt;
   6 9      14&lt;br /&gt;
  4&lt;br /&gt;
   5&lt;br /&gt;
next_pre&lt;br /&gt;
10&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
7&lt;br /&gt;
6&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
9&lt;br /&gt;
13&lt;br /&gt;
12&lt;br /&gt;
15&lt;br /&gt;
14&lt;br /&gt;
prev_pre&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
9&lt;br /&gt;
5&lt;br /&gt;
4&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
10&lt;br /&gt;
next_in&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
prev_in&lt;br /&gt;
15&lt;br /&gt;
14&lt;br /&gt;
13&lt;br /&gt;
12&lt;br /&gt;
10&lt;br /&gt;
9&lt;br /&gt;
7&lt;br /&gt;
6&lt;br /&gt;
5&lt;br /&gt;
4&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
next_post&lt;br /&gt;
2&lt;br /&gt;
5&lt;br /&gt;
4&lt;br /&gt;
6&lt;br /&gt;
9&lt;br /&gt;
7&lt;br /&gt;
3&lt;br /&gt;
12&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
13&lt;br /&gt;
10&lt;br /&gt;
prev_post&lt;br /&gt;
10&lt;br /&gt;
13&lt;br /&gt;
15&lt;br /&gt;
14&lt;br /&gt;
12&lt;br /&gt;
3&lt;br /&gt;
7&lt;br /&gt;
9&lt;br /&gt;
6&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
task 6&lt;br /&gt;
insert 1 to 63 =&amp;gt; height should be 7 : 7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==discussion==&lt;br /&gt;
this lab is very easy to have a mistake.&lt;br /&gt;
&lt;br /&gt;
It took about 10 hours to finish all tasks.&lt;br /&gt;
&lt;br /&gt;
first I change lab6.c to tree.c and tree.h&lt;br /&gt;
&lt;br /&gt;
and create main file lab6.c to test all functions written in tree.c&lt;br /&gt;
&lt;br /&gt;
* task 1: I just display the inputs and height but it is quite clear that the heights is showing quite random but if we look at the out line, the degree of the graph decreases by increasing the inputs.&lt;br /&gt;
&lt;br /&gt;
* task 2: this function is to finding leftest or rightest value and lab6.c test this function by using one example of tree.&lt;br /&gt;
&lt;br /&gt;
* task 3: lab6.c test two things that the function finds key or not. using the example tree from task 2.&lt;br /&gt;
&lt;br /&gt;
* task 4,5: they were most tricky because there are a lot of conditions have to deal with. lab6.c creates one complex example and display all next, prev functions from start to the end.&lt;br /&gt;
&lt;br /&gt;
* task 6: Idea of this task was to input the middle value first. this question is easily solved by calling the function inside of the function.&lt;/div&gt;</summary>
		<author><name>Mark</name></author>
	</entry>
</feed>