二叉树遍历算法c语言 C语言演示二叉树算法

C语言演示二叉树算法――简介

 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2i ? 1个结点;深度为k的二叉树至多有2k ? 1个结点;对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0 = n2 + 1。二叉树算法常被用于实现二叉查找树和二叉堆。

C语言演示二叉树算法――方法/步骤

C语言演示二叉树算法 1、

首先打开VC++6.0


C语言演示二叉树算法 2、

选择文件,新建


C语言演示二叉树算法 3、

选择C++ source file 新建一个空白文档

C语言演示二叉树算法_二叉树


C语言演示二叉树算法 4、

首先声明头文件


C语言演示二叉树算法 5、

定义树的结点结构


typedef struct TreeNode{

char data;/*树中结点的数据是一个字符*/

struct TreeNode *lchild;

struct TreeNode *rchild;

}TREENODE;


二叉树遍历算法c语言 C语言演示二叉树算法

C语言演示二叉树算法 6、

声明变量

int NodeNum = 0;/*统计数的结点数*/

int LeafNum = 0;/*统计数的叶子结点数*/

char ch[] = {'a', 'b', 'c', ' ', ' ', 'd', ' ', ' ', 'e', 'f', ' ', ' ', 'g', ' ', ' '};

int inc = 0;


C语言演示二叉树算法_二叉树


C语言演示二叉树算法 7、

用函数建立一个二叉树


int CreateBiTree(TREENODE **T)

/*按先序次序输入二叉树中结点的值,以空字符表示空树*/

{

char i;

if(ch[inc++]==' ')

*T = NULL;

else

{

printf("%cn",ch[inc-1]);

if(!(*T = (TREENODE *)malloc(sizeof(TREENODE))))

return -1;

(*T)->data = ch[inc-1];

printf("%cn",(*T)->data);

CreateBiTree(&((*T)->lchild));

CreateBiTree(&((*T)->rchild));

}

return 1;

}



C语言演示二叉树算法 8、

先序遍历二叉树

int PreOderTraverse(TREENODE *T)

{

if(T)

{

printf("%c ",T->data);

PreOderTraverse(T->lchild);

PreOderTraverse(T->rchild);

}

return 1;

}



C语言演示二叉树算法 9、

中序遍历二叉树

int InOderTraverse(TREENODE *T)

{

if(T)

{

InOderTraverse(T->lchild);

printf("%c ",T->data);

InOderTraverse(T->rchild);

}

return 1;

}


C语言演示二叉树算法_二叉树


C语言演示二叉树算法 10、

后序遍历二叉树

int BackOderTraverse(TREENODE *T)

{

if(T)

{

BackOderTraverse(T->lchild);

BackOderTraverse(T->rchild);

printf("%c ",T->data);

}

return 1;

}



C语言演示二叉树算法 11、

利用先序遍历来计算树中的结点数

void CountNodeNum(TREENODE *T)

{

if(T)

{

NodeNum ++;

CountNodeNum(T->lchild);

CountNodeNum(T->rchild);

}

}



C语言演示二叉树算法 12、

利用先序遍历计算叶子节点数

void CountLeafNum(TREENODE *T)

{

if(T)

{

if((!(T->lchild))&&(!(T->rchild)))

LeafNum ++;

CountLeafNum(T->lchild);

CountLeafNum(T->rchild);

}

}


C语言演示二叉树算法_二叉树


C语言演示二叉树算法 13、

主函数

int main()

{

TREENODE *T;

int i;

CreateBiTree(&T);

do

{

puts("**************************************************");

puts("* you can choose: *");

puts("* 1: Traverse the Binary tree by pre order *");

puts("* 2: Traverse the Binary tree by mid order *");

puts("* 3: Traverse the Binary tree by back order *");

puts("* 4: Count the node num of the Binary tree *");

puts("* 5: Count the leaf node num of the Binary tree*");

puts("**************************************************");

puts("please input your choice:");

scanf("%d",&i);

switch(i)

{

case 1:

printf("The preoder is:n");

PreOderTraverse(T);

printf("n");

break;

case 2:

printf("The midoder is:n");

InOderTraverse(T);

printf("n");

break;

case 3:

printf("The backoder is:n");

BackOderTraverse(T);

printf("n");

break;

case 4:

CountNodeNum(T);

printf("The nodenum of the tree is:%dn",NodeNum);

break;

case 5:

CountLeafNum(T);

printf("The leafnum of the tree is:%dn",LeafNum);

break;

}

printf("please input any char to go onn");

getch();

}while((i>=1)&&(i<6));


getch();

return 1;

}



C语言演示二叉树算法 14、

运行结果

  

爱华网本文地址 » http://www.413yy.cn/a/8105050103/324504.html

更多阅读

平衡二叉树的生成理论 平衡二叉树

本文由作者收集整理所得,作者不保证内容的正确行,转载请标明出处。作者:关新全1、AVL的插入算法描述在平衡的二叉排序树T上插入一个关键码为kx的新元素,递归算法可描述如下:(一)若T为空树,则插入一个数据元素为kx的新结点作为T的根结

二叉树的应用详解 二叉树遍历代码详解

概述:平衡树——特点:所有结点左右子树深度差≤1排序树——特点:所有结点“左小右大字典树——由字符串构成的二叉排序树判定树——特点:分支查找树(例如12个球如何只称3次便分出轻重)带权树——特点:路径带权值(例如长度)最优树——是带权路

二叉排序树的实现 二叉排序树的查找

二叉排序树的实现 分类: 数据结构 2012-08-12 20:42 265人阅读 评论(0) 收藏 举报nullinsertdeletetreeclass算法二叉排序树(Binary Sort Tree)又称二叉查找树。 它是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结

二叉树遍历的迭代实现 java实现二叉树的遍历

个人觉得中序遍历的迭代实现是三种遍历方式中较难的一种。 先来比较难的中序遍历。其实思路很简单,就是先把root push进栈,然后不断迭代下述过程:把栈头节点pointer pop出来,假如这个pointer有子节点并且它的子节点没有被pus

声明:《二叉树遍历算法c语言 C语言演示二叉树算法》为网友淡淡稻花香分享!如侵犯到您的合法权益请联系我们删除