首页 > 代码库 > 数据结构(C实现)------- 遍历二叉树

数据结构(C实现)------- 遍历二叉树

        本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020

        二叉树是另一中树型结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。

        根据二叉树的的递归定义可知,二叉树是由3个基本单元组成,根结点、左子树和右子树,因此,若能依次遍历这三部分,便是遍历了整个二叉树。假如以L、D、R分别表示遍历左子树、访问根结点和遍历右子树,则可能有DLR、LDR、LRD、DRL、RDL、RLD这6种遍历二叉树的方案。若限定先左后右,则只有前3种情况,分别称为先序遍历、中序遍历和后序遍历,另外,还有一种遍历方法,即从上到下,从左到右依次遍历二叉树的每个结点,称之为层次遍历。 故,共有4种遍历二叉树的方法。

二叉树遍历操作定义:

      1. 先序遍历二叉树的操作定义:

             若二叉树为空,则空操作;否则

                 1) 访问根结点

                 2) 先序遍历左子树

                 3) 先序遍历右子树

      2. 中序遍历二叉树的操作定义:

              若二叉树为空,则空操作;否则

                 1) 中序遍历左子树

                 2) 访问根结点

                 3) 中序遍历右子树

        

     3. 后序遍历二叉树的操作定义:

              若二叉树为空,则空操作;否则

                 1) 后序遍历左子树

                 2) 后序遍历右子树

                 3) 访问根结点

   

     4. 层次遍历二叉树的操作定义:

              若二叉树为空,则空操作;否则

                 1) 从上到下

                 2) 同一层,从左到右依次遍历

二叉树的存储结构:

       1. 顺序存储结构:         

#define MAX_TREE_SIZE 100
typedef char TElemType; 
typedef TElemType SqBiTree[MAX_TREE_SIZE];
SqBiTree bt;

      2. 链式存储结构:

//二叉树的的
#define MAXSIZE 100 //二叉树中最多的结点数 
typedef char TElemType; 
typedef struct BiTNode{
	TElemType data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

二叉树的遍历具体实现:

#include <stdio.h>
#include <stdlib.h>

//二叉树的的
#define MAXSIZE 100 //二叉树中最多的结点数 
typedef char TElemType; 
typedef struct BiTNode{
	TElemType data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

//定义函数指针
typedef void(* Visit)(BiTree);

//二叉树的初始化
void Init_BiTree(BiTree *T){
	*T = NULL;
}

//判断二叉树是否为空,返回1
int IsEmpty_BiTree(BiTree *T){
	return *T == NULL;
}

//创建二叉树
void Create_BiTree(BiTree *T){
	char ch;
	ch = getchar();
	//当输入的是"#"时,认为该子树为空
	if(ch == '#')
		*T = NULL;
	//创建树结点
	else{
		*T = (BiTree)malloc(sizeof(BiTNode));
		(*T)->data = http://www.mamicode.com/ch; //生成树结点>

二叉树的遍历结果:

         给定二叉树,如,输入1247###5#8##36###




 

 

            




数据结构(C实现)------- 遍历二叉树