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;
    }
    

      

  • 相关阅读:
    .Net常见面试题整理(一)——值类型和引用类型
    c#字符串常见操作
    sealed,new,virtual,abstract与override
    c#好的程序员必须掌握的编码习惯
    c#区分传值调用 传引用调用。
    C# const和readonly的区别
    .Net常见面试题整理(二)——装箱和拆箱
    C#Equals()和运算符==的区别
    private,protected,public和internal的区别
    2013应届毕业生“数码视讯”校招应聘总结
  • 原文地址:https://www.cnblogs.com/devinblog/p/4170744.html
Copyright © 2011-2022 走看看