Solved

Diplaying data in binary tree

Posted on 2006-07-09
7
375 Views
Last Modified: 2008-02-01
i have store some data in database( mysql). i want to display that data in a binary tree on web page. i m able to display some in binary tree but not all. is there any method to display that in binary form ?
i want to dispalay data in following manner
     a
  |    |
  b    c
      |   |
      d   e
 and so on.......
0
Comment
Question by:abhishek2002
  • 4
7 Comments
 
LVL 7

Accepted Solution

by:
maUru earned 250 total points
ID: 17072084
use a parent-child structure

ID, pID, data

so basically your tree would be saved as:

id , pid, data
1    0    a
2    1    b
3    1    c
4    3    d
5    3    e

pid is the id of the element directly above


and to display it, use a recursive function, there are many different algorithms, here is one i picked up from here:

(id = category_id, pid = parent_id, data = title)

so the table format for this code would be:

category_id, parent_id, title

<?php

// Recursive function to generate a parent/child tree
// Without the need for a Root parent
// Written by: Brian Parnes
// 13 March 2006

//$connect = mysql_connect(HOST_NAME, USERNAME, PASSWORD);
//mysql_select_db(DATABASE);
$nav_query = mysql_query("SELECT * FROM `categories` ORDER BY `category_id`");
$tree = "";                              // Clear the directory tree
$depth = 1;                              // Child level depth.
$top_level_on = 1;                  // What top-level category are we on?
$exclude = array();                  // Define the exclusion array
array_push($exclude, 0);      // Put a starting value in it

while ( $nav_row = mysql_fetch_array($nav_query) )
{
      $goOn = 1;                  // Resets variable to allow us to continue building out the tree.
      for($x = 0; $x < count($exclude); $x++ )            // Check to see if the new item has been used
      {
            if ( $exclude[$x] == $nav_row['category_id'] )
            {
                  $goOn = 0;
                  break;                        // Stop looking b/c we already found that it's in the exclusion list and we can't continue to process this node
            }
      }
      if ( $goOn == 1 )
      {
            $tree .= $nav_row['title'] . "<br>";                        // Process the main tree node
            array_push($exclude, $nav_row['category_id']);            // Add to the exclusion list
            if ( $nav_row['category_id'] < 6 )
            { $top_level_on = $nav_row['category_id']; }
            
            $tree .= build_child($nav_row['category_id']);            // Start the recursive function of building the child tree
      }
}

function build_child($oldID)                  // Recursive function to get all of the children...unlimited depth
{
      global $exclude, $depth;                  // Refer to the global array defined at the top of this script
      $child_query = mysql_query("SELECT * FROM `categories` WHERE parent_id=" . $oldID);
      while ( $child = mysql_fetch_array($child_query) )
      {
            if ( $child['category_id'] != $child['parent_id'] )
            {
                  for ( $c=0;$c<$depth;$c++ )                  // Indent over so that there is distinction between levels
                  { $tempTree .= "&nbsp;"; }
                  $tempTree .= "- " . $child['title'] . "<br>";
                  $depth++;            // Incriment depth b/c we're building this child's child tree  (complicated yet???)
                  $tempTree .= build_child($child['category_id']);            // Add to the temporary local tree
                  $depth--;            // Decrement depth b/c we're done building the child's child tree.
                  array_push($exclude, $child['category_id']);                  // Add the item to the exclusion list
            }
      }
      
      return $tempTree;            // Return the entire child tree
}

echo $tree;

?>
0
 
LVL 7

Expert Comment

by:maUru
ID: 17072104
0
 

Author Comment

by:abhishek2002
ID: 17079012
i have implement this code. it is working .
thankyou
0
 
LVL 7

Expert Comment

by:maUru
ID: 17104967
np
0
 
LVL 7

Expert Comment

by:maUru
ID: 17123427
mind accepting the answer?
0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Foreword (July, 2015) Since I first wrote this article, years ago, a great many more people have begun using the internet.  They are coming online from every part of the globe, learning, reading, shopping and spending money at an ever-increasing ra…
Developers of all skill levels should learn to use current best practices when developing websites. However many developers, new and old, fall into the trap of using deprecated features because this is what so many tutorials and books tell them to u…
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to count occurrences of each item in an array.

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now