zoukankan      html  css  js  c++  java
  • 二叉树的构造与遍历(前序、中序、后序)

    注意:

      构造二叉树的时候要用双重指针,用单重指针时,要有返回值。

    代码如下:

    /*
    此处输入空格代表空,默认按前序遍历完全二叉树的方式输入数据
    形参是在执行函数时自动分配的,没有执行这个函数之前不占用存
    储空间,当函数执行完毕后释放这个形参,所以我们要使用到双重指
    针来构造树。这样,我们传进去的是树节点的指针的指针,这样函数
    执行完成后即使这个“指针的指针“被释放掉了,我们通过*T保存的树
    结点的数据还是可以通过树节点的指针T来调用。相反,如果我们传
    进去如果是树结点的指针,当这个函数执行完毕后,这个指针被销毁
    了,而且CreateBiTree()函数不返回任何值,所以等于这个函数没有
    被调用。
    
    */
    #include <stdio.h>
    #include <stdlib.h>
    typedef char ElemType;
    typedef struct BiTNode
    {
        ElemType data;
        struct BiTNode *lchild;
        struct BiTNode *rchild;
    }BiTNode,*BiTree;
    typedef struct BiTNode *LinkTree;
    
    void CreateBiTree(BiTree *T)
    {
        char c;
        scanf("%c",&c);
        if(' ' == c)
        {
            (*T) = NULL;
        }
        else
        {
            (*T) = (LinkTree)malloc(sizeof(BiTNode));
            (*T)->data = c;
            CreateBiTree(&(*T)->lchild);
            CreateBiTree(&(*T)->rchild);
        }
    }
    
    void PreOrderTraverse(BiTree T,int level)
    {
        if(T)
        {
            printf("%c->",T->data);
            PreOrderTraverse(T->lchild,level+1);
            PreOrderTraverse(T->rchild,level+1);
        }
    }
    void InOrderTraverse(BiTree T,int level)
    {
        if(T)
        {
            InOrderTraverse(T->lchild,level+1);
            printf("%c->",T->data);
            InOrderTraverse(T->rchild,level+1);
        }
    
    }
    
    void PostOrderTraverse(BiTree T,int level)
    {
        if(T)
        {
            PostOrderTraverse(T->lchild,level+1);
            PostOrderTraverse(T->rchild,level+1);
            printf("%c->",T->data);
        }
    
    }
    int main()
    {
        int level = 1;
        BiTree T = NULL;
        CreateBiTree(&T);
        printf("前序遍历的结果为:
    ");
        PreOrderTraverse(T,level);
        printf("
    中序遍历的结果为:
    ");
        InOrderTraverse(T,level+1);
        printf("
    后序遍历的结果为:
    ");
        PostOrderTraverse(T,level);
        return 0;
    }
    

      

  • 相关阅读:
    Redis面试题
    spring boot错误: 找不到或无法加载主类
    JAVA的高并发编程
    Redis多机多节点集群实验
    Redis单机多节点集群实验
    Redis集群概述
    Redis的持久化之AOF方式
    Redis的持久化之RDB方式
    Redis持久化介绍
    Redis Keys的通用操作
  • 原文地址:https://www.cnblogs.com/devinblog/p/4170744.html
Copyright © 2011-2022 走看看