有趣的二叉树

2019-06-11  本文已影响0人  始于尘埃

跟着米Sir学编程

#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;

typedef struct BiTNode{
    char data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

//创建二叉树-约定用前序遍历输入
void CreatBiTree(BiTree  &T){
    char c;
    scanf("%c",&c);
    if(c==' '){
        T=NULL;

    }
    else{
        //创建节点
        T = (BiTNode*)malloc(sizeof(BiTNode));
        T->data=c; //先创建头结点,再底过程创建左右节点
        CreatBiTree(T->lchild);
        CreatBiTree(T->rchild);
    }
}
void visit(char a,int b){
    printf("%c位于第%d层\n",a,b);
}

//先序遍历
void PreOrderTree(BiTree T,int level){
    if(T){
        visit(T->data,level); //你要对节点做什么?(自己定义)
        PreOrderTree(T->lchild,level+1);
        PreOrderTree(T->rchild,level+1);
    }
}
int main()
{
    int level = 1;
    BiTree T = NULL;
    CreatBiTree(T);
    PreOrderTree(T,level);
    system("pause");
    return 0;

}

/*
问题说明:
1.为什么输入的时候,要求用规定的三种方式(前中后序遍历)输入??
这主要是为了实现递归操作。递归的实现前前提是要有退出条件(这里的是指针为NULL),其实指针NULL的节点就是叶子节点,如果我们不这样设置,那就不会退出循环。
比如:
我们随便输入abcde 5个节点,我们发现他没有输出结果,是因为你没有给他退出循环的条件,可以发现他是一个右斜树,如果要输出一个完整的二叉树,则应该
输入‘ ’表示叶子节点,即退出当前循环的条件
*/

上一篇 下一篇

猜你喜欢

热点阅读