二叉树的遍历

二叉树的遍历
   
     
#include " iostream "
#include
" stdlib.h "
using namespace std;

struct tree
{
int data;
struct tree * left;
struct tree * right;
};

typedef
struct tree treenode;
typedef treenode
* btree;


/* ------插入二叉树的结点------- */
btree insertnode(btree root,
int value)
{
btree newnode;
btree current;
btree back;


/* ---创建新结点内存--- */

newnode
= (btree)malloc( sizeof (treenode));
newnode
-> data = value;
newnode
-> right = NULL;
newnode
-> left = NULL;

if (root == NULL)
{
return newnode;
}
else
{
current
= root;
while (current != NULL)
{
back
= current;
if (current -> data > value)
current
= current -> left;
else
current
= current -> right;
}
if (back -> data > value)
back
-> left = newnode;
else
back
-> right = newnode;
}
return root;
}

/* ------创建二叉树-------- */

btree createbtree(
int * data, int len)
{
btree root
= NULL;
int i;
for (i = 0 ;i < len;i ++ )
root
= insertnode(root,data[i]);
return root;
}
/* -----中序遍历------ */
void inorder( btree ptr)
{
if (ptr != NULL)
{
inorder(ptr
-> left);
printf(
" [%2d]\n " ,ptr -> data);
inorder(ptr
-> right);
}
}
/* ----------------------- */

/* --------前序遍历------- */

void preorder(btree ptr)
{
if (ptr != NULL)
{

printf(
" [%2d]\n " ,ptr -> data);
inorder(ptr
-> left);
inorder(ptr
-> right);
}
}
/* ----------------------------- */

/* ------后序遍历-------- */

void postorder(btree ptr)
{
if (ptr != NULL)
{

inorder(ptr
-> left);
inorder(ptr
-> right);
printf(
" [%2d]\n " ,ptr -> data);

}
}
/* --------------------------- */

/* ---------主程序----- */

int main()
{
btree root
= NULL;

int data[ 9 ] = { 5 , 6 , 4 , 8 , 2 , 3 , 7 , 1 , 9 };
root
= createbtree(data, 9 );
printf(
" 树的结点内容:\n " );
inorder(root);
cout
<< endl;
preorder(root);
cout
<< endl;
postorder(root);
cout
<< endl;

}

 

你可能感兴趣的:(二叉树)