码迷,mamicode.com
首页 > 其他好文 > 详细

35. 蛤蟆的数据结构笔记之三十五遍历二叉树

时间:2015-07-17 09:54:48      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

35. 蛤蟆的数据结构笔记之三十五遍历二叉树

 

本篇名言:“冬天已经到来,春天还会远吗? --雪莱”

         我们来看徐璈如何遍历二叉树。

欢迎转载,转载请标明出处:


1.  二叉树遍历

 二叉树的遍历有三种方式,如下:

(1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树。简记根-左-右。

(2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树。简记左-根-右。

(3)后序遍历(LRD),首先遍历左子树,然后遍历右子树,最后访问根结点。简记左-右-根。 

2.  遍历

2.1         main

定义一个结构体,包含一个data,一个左指针,一个右指针。

         输入树的节点个数,先将树的每个节点放到一个数组当中。

         接着输入关联每个节点的左右子节点。

如果子节点为空,则输入0即可。

         然后根据选择输出,前序遍历,中序遍历,后序遍历。输入参数为第一个节点。

如下图 1 所示:

 技术分享

 

3.  源码

#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);

}

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

35. 蛤蟆的数据结构笔记之三十五遍历二叉树

标签:

原文地址:http://blog.csdn.net/notbaron/article/details/46918765

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!