标签:
35. 蛤蟆的数据结构笔记之三十五遍历二叉树
本篇名言:“冬天已经到来,春天还会远吗? --雪莱”
我们来看徐璈如何遍历二叉树。
欢迎转载,转载请标明出处:
二叉树的遍历有三种方式,如下:
(1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树。简记根-左-右。
(2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树。简记左-根-右。
(3)后序遍历(LRD),首先遍历左子树,然后遍历右子树,最后访问根结点。简记左-右-根。
定义一个结构体,包含一个data,一个左指针,一个右指针。
输入树的节点个数,先将树的每个节点放到一个数组当中。
接着输入关联每个节点的左右子节点。
如果子节点为空,则输入0即可。
然后根据选择输出,前序遍历,中序遍历,后序遍历。输入参数为第一个节点。
如下图 1 所示:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
struct bitnode
{
intdata;
struct bitnode*left,*right;
};
void first(bitnode*p);
void middle(bitnode*p);
void final(bitnode*p);
void visit(bitnode*q);
void main()
{
inti,m,a,b,num;
charch;
printf("pleaseinput the number of the tree‘s nodes:\n");
scanf("%d",&m);
bitnode*tree[100];
tree[0]=NULL;
printf("inputthe data in sequence:\n");
for(i=1;i<=m;i++)
{
tree[i]=(bitnode*)malloc(sizeof(bitnode));
scanf("%d",&tree[i]->data);
}
for(i=1;i<=m;i++)
{
printf("lefechild rightchild %d \n",tree[i]->data);
scanf("%d%d",&a,&b);
tree[i]->left=tree[a];
tree[i]->right=tree[b];
}
do
{
getchar();
system("cls");
printf("-----------------menu-----------------\n");
printf("--------------------------------------\n");
printf(" 1.root-left-right \n");//先序遍历
printf(" 2.left-root-right \n");//中序遍历
printf(" 3.left-right-root \n");//后序遍历
printf(" 4.exit \n");
printf("pleaseinput your choice:\n");
scanf("%d",&num);
fflush(stdin);
switch(num)
{
case1:first(tree[1]);break;
case2:middle(tree[1]);break;
case3:final(tree[1]);break;
case4:exit(0);
default:printf("yourchoice is wrong! please cheak it.\n");
}
printf("\ndoyou want to continue?(Y/N)\n");
scanf("%c",&ch);
}while(ch==‘y‘||ch==‘Y‘);
}
void first(bitnode *p)
{
if(p)
{
visit(p);
if(p->left)
{
first(p->left);
if(p->right)
{
first(p->right);
}
}
}
}
void middle(bitnode *p)
{
if(p)
{
if(p->left)
{
middle(p->left);
}
visit(p);
if(p->right)
{
middle(p->right);
}
}
}
void final(bitnode *p)
{
if(p)
{
if(p->left)
{
final(p->left);
if(p->right)
{
final(p->right);
}
}
visit(p);
}
}
void visit(bitnode *q)
{
printf("--%d--",q->data);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/notbaron/article/details/46918765