二叉树算法集
#include<stdlib.h>
#include<stdio.h>
#define MAX 50
#define MAS 20
#define CHAR 1
#if CHAR
typedef char TElemType;
TElemType Nil=' ';
#define form "%c"
#else
typedef int TElemType;
TElemType Nil=0;
#define form "%d"
#endif
typedef struct node
{TElemType data;<BR> struct node *left;<BR> struct node *right;<BR> struct node *parent;<BR>}BiTNode,*BiTree;
BiTNode *InitBiTree(BiTNode *bt)
{
bt=NULL;
return bt;
}
BiTNode *CreateBiTree(BiTNode *bt)
{TElemType ch;<BR> scanf(form,&ch);<BR> if(ch==Nil) bt=NULL;<BR> else<BR> {bt=(BiTNode *)malloc(sizeof(BiTNode));<BR> if(!bt) exit(0);<BR> bt->data=ch; bt->parent=NULL;<BR> bt->left=CreateBiTree(bt->left);<BR> if(bt->left) bt->left->parent=bt;<BR> bt->right=CreateBiTree(bt->right);<BR> if(bt->right) bt->right->parent=bt;<BR> }
return bt;
}
void PrintTree(BiTNode *bt,int i)
{ if(bt!=NULL)
{PrintTree(bt->right,i 5);<BR> #if CHAR<BR> if(bt->data!=Nil)<BR> printf("%*cn",i,bt->data);<BR> #else<BR> if(bt->data!=Nil)<BR> printf("%*dn",i,bt->data);<BR> #endif<BR> PrintTree(bt->left,i 5);<BR> i=i-5;<BR> }
}
void Prorder1(BiTNode *bt,void(*visit)(TElemType))/*先序遍历*/
{if(bt!=NULL)<BR> {visit(bt->data);<BR> Prorder1(bt->left,visit);<BR> Prorder1(bt->right,visit);<BR> }
}
void Prorder2(BiTNode *bt,void(*visit)(TElemType))/*中序遍历*/
{BiTNode *p,*stack[MAS];<BR> int top;<BR> top=0; p=bt;<BR> while(top!=0||p!=NULL)<BR> {while(p!=NULL)<BR> {stack[top]=p; top ;<BR> p=p->left;<BR> }
if(top!=0)
{p=stack[top-1];<BR> top--;<BR> visit(p->data);<BR> p=p->right;<BR> }
}
}
void Prorder3(BiTNode *bt,void(*visit)(TElemType))/*后序遍历*/
{BiTNode *p,
您可能感兴趣的文章:
Python中的树你知道吗?
数据结构中树与二叉树基础算法的比较
php 二叉树遍历算法与例子
Python中的二叉排序树和平衡二叉树是什么
二叉链表表示的二叉树及基本操作
数据结构与算法–四叉树(javascript实现)
C 实现二叉查找树过程详解教程【图】
关于二叉树的深度算法题目及解答
java中二叉树遍历(递归) 程序代码
Golang算法:二叉树前序,中序,后序非递归遍历算法