栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构 07 - 二叉树的遍历

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构 07 - 二叉树的遍历

  树是由m(m>=0)个结点组成的有序集合,而二叉树的结点的子节点应该为n(n<=2),且严格区分左孩子结点和右孩子结点。
下面为二叉树的链式存储以及二叉树的4种遍历方式。

设有如下二叉树:
				A					先序遍历: ABCDEFGHK
			   / 					中序遍历: BDCAEHGKF
	   		  B    E				后序遍历: DCBHKGFEA
			       				层次遍历: ABECFDGHK
			    C    F
			   /    /
			  D    G
			      / 
			     H   K

C语言代码实现:
采用链式存储,递归存入的方式创建二叉树,以’#'表示空结点,运行结果如下:

实现代码:

#include "tree.h"
T_node *create_tree() //创建二叉树
{
    char c;
    if((c = getchar()) != '#'){
        T_node *root = (T_node *)malloc(sizeof(T_node));
        if(NULL == root){//申请空间失败
            printf("malloc failed!n");
            return NULL;
        }
        
        root->data = c;
        root->l_child = create_tree();//递归创建左孩子节点
        root->r_child = create_tree();//递归创建右孩子节点

        return root;
    }
    else{
        return NULL;
    }
}

//先序遍历
void pre_traversal(T_node *tree)
{
    if(!tree){
        return;
    }
    else{
        printf("%c ",tree->data);
        pre_traversal(tree->l_child);
        pre_traversal(tree->r_child);
    }
}

//中序遍历
void mid_traversal(T_node *tree)
{
    if(!tree){
        return;
    }
    else{
        mid_traversal(tree->l_child);
        printf("%c ",tree->data);
        mid_traversal(tree->r_child);
    }
}
//后序遍历
void pos_traversal(T_node *tree)
{
    if(!tree){
        return;
    }
    else{
        pos_traversal(tree->l_child);
        pos_traversal(tree->r_child);
        printf("%c ",tree->data);
    }
}

//层次遍历
void lev_traversal(T_node *tree)
{
    if(tree == NULL) return;    //空树返回
    T_node *p,*t[32] = {0};
    int front,rear;     //头尾‘指针’
    front = rear = 1;   //下标从1开始
    t[rear] = tree;

    while(t[front] != NULL){
        printf("%c ",t[front]->data);

        p = t[front];

        if(p->l_child != NULL){
            t[++rear] = p->l_child;
        }
        
        if(p->r_child != NULL){
            t[++rear] = p->r_child;
        }
        front++; 
    }
}
#include "tree.h"
int main()
{
    T_node *t = create_tree();

    printf("先序遍历:");
    pre_traversal(t);
    puts("");

    printf("中序遍历:");
    mid_traversal(t);
    puts("");

    printf("后序遍历:");
    pos_traversal(t);
    puts("");

    printf("层次遍历:");
    lev_traversal(t);
    puts("");

    return 0;
}
#include 
#include 
#include 

#ifndef __TREE__
#define __TREE__

typedef int data_t;
typedef struct tree_node{
    data_t data;				//数据域
    struct tree_node *l_child;	//指向左孩子节点
	struct tree_node *r_child;  //指向右孩子节点
}T_node;

//创建树
T_node *create_tree();
//先序遍历
void pre_traversal(T_node *tree);
//中序遍历
void mid_traversal(T_node *tree);
//后序遍历
void pos_traversal(T_node *tree);
//层次遍历
void lev_traversal(T_node *tree);
#endif
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034815.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号