数据结构与算法——二叉树的创建与遍历

这两天在看树的部分,先总结一下二叉树。

什么是树?

树也是一种数据结构,是由n个结点组成的具有层次关系的集合。树由根结点和子节点组成,与现实生活中的树不同,这里的树,根结点是在最上面的,叶子结点在下面,就像是将现实中的树倒着挂起来一样。

树的特点:

  • 每个结点有零个或多个子结点。
  • 每一个子结点只有一个父结点。
  • 没有前驱的结点称为根结点,没有子结点的结点为叶子结点。
  • 除根结点外,每个子结点可分为m个不相交的子树。

什么是二叉树?

二叉树特点是每个结点最多有两个子结点。

树和二叉树的区别:

  • 树中的结点个数至少为1,而二叉树中的结点个数可以为0;
  • 树中结点的度没有限制,而二叉树中结点的最大度为2.

二叉树的实现:

这里二叉树的创建时采用递归的方式,并且每次创建的都是根节点,采用的是前序遍历的方式。

<span style="font-size:18px;">#include <stdio.h>
#include <stdlib.h>
typedef char TElemType;
typedef struct BiNode {
    TElemType data;
    struct BiNode *lchild,*rchild;
}BiNode,*BiTree;

//创建二叉树
BiTree createBiTree(BiTree *T) {
    TElemType ch;
    scanf("%c",&ch);
    if(ch=='#') {
        *T = NULL;
    }else {
        *T = (BiTree)malloc(sizeof(BiNode));
        if(!*T)
            exit(-1);

         (*T)->data = ch;
        createBiTree(&(*T)->lchild);
        createBiTree(&(*T)->rchild);
    }
    return T;
}

//前序遍历
void preorderTraverse(BiTree T) {
    if(T==NULL)
        return;
    printf("%c",T->data);
    preorderTraverse(T->lchild);
    preorderTraverse(T->rchild);
}

//中序遍历
void InorderTraverse(BiTree T) {
   if(T){
    InorderTraverse(T->lchild);
    printf("%c",T->data);
    InorderTraverse(T->rchild);
   }
}

//后序遍历
void PostorderTraverse(BiTree T) {
    if(T) {
        PostorderTraverse(T->lchild);
        PostorderTraverse(T->rchild);
        printf("%c",T->data);
    }
}
int main()
{
    BiTree t;
    createBiTree(&t);
    printf("%s\n","前序遍历");
    preorderTraverse(t);
    printf("\n");
    printf("%s","中序遍历");
    printf("\n");
    InorderTraverse(t);
    printf("\n");
    printf("%s\n","后序遍历");
    PostorderTraverse(t);

    return 0;
}
</span>



猜你喜欢

转载自blog.csdn.net/hsk256/article/details/45933947