• 二叉树的建立和遍历


    所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。

    二叉树有三种遍历方法:

    1、前序遍历,也叫先根遍历,遍历的顺序是,根,左子树,右子树;

    2、中序遍历,也叫中根遍历,顺序是 左子树,根,右子树;

    3、后序遍历,也叫后根遍历,遍历顺序,左子树,右子树,根。

    同样二叉树的建立也有三种方式,在此处只做了前序建立二叉树的方法。以下就是二叉树的建立和遍历代码。欢迎大家拍砖。

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

    typedef struct treeNode
    {
    int data;
    struct treeNode *leftTree;
    struct treeNode *rightTree;
    }linkTreeNode;
    /*****************************************
    用于测试的二叉树:
    1
    2 3
    4 5 6 7

    前序遍历结果:1 2 4 5 3 6 7
    中序遍历结果:4 2 5 1 6 3 7
    后序遍历结果:4 5 2 6 7 3 1
    ***************************************/
    // 前序建立二叉树
    //通过控制台需要输入的数据内容依次为:1,2,4,0,0,5,0,0,3,6,0,0,7,0,0
    linkTreeNode *createNode()
    {
    linkTreeNode *node;
    int x;
    printf("输入结点值\n");
    scanf("%d",&x);
    if(x==0)
    {
    node=NULL;
    }
    else
    {
    node=(linkTreeNode *)malloc(sizeof(linkTreeNode));
    node->data=x;
    node->leftTree=createNode();
    node->rightTree=createNode();
    }
    return node;
    }

    //打印结点数据内容
    void visitData(linkTreeNode *node)
    {
    printf("tree node data: %d\n",node->data);
    }
    //前序遍历
    void frontTraverse(linkTreeNode *node)
    {
    if (node==NULL)
    {
    return;
    }

    visitData(node);
    frontTraverse(node->leftTree);
    frontTraverse(node->rightTree);
    }
    //中序遍历
    void middleTraverse(linkTreeNode *node)
    {
    if (node==NULL)
    {
    return;
    }

    middleTraverse(node->leftTree);
    visitData(node);
    middleTraverse(node->rightTree);
    }
    //后序遍历
    void postorderTraverse(linkTreeNode *node)
    {
    if (node==NULL)
    {
    return;
    }
    postorderTraverse(node->leftTree);
    postorderTraverse(node->rightTree);
    visitData(node);
    }

    int main()
    {
    linkTreeNode *headNode=NULL;
    headNode=createNode();

    printf("前序遍历\n");
    frontTraverse(headNode);
    printf("中序遍历\n");
    middleTraverse(headNode);
    printf("后序遍历\n");
    postorderTraverse(headNode);
    return 1;
    }

     

  • 相关阅读:
    SVN使用方法
    NHiberante3.2 调用存储过程之Errors in named queries:
    AjaxFileUpload + *.ashx 文件上传在IE8.0(XP,VS2010,Development Server)下的注意
    PB中设置SQLCA.AutoCommit = False的说明
    UrlRoutingModel摘要
    PB中的大数据量插入操作测试
    PB TreeView控件
    关于端口共用
    关于RealProxy
    EF无法更新错误
  • 原文地址:https://www.cnblogs.com/wenxp2006/p/2651840.html
Copyright © 2020-2023  润新知