数据结构——二叉树

来源:互联网 发布:我国的网络技术发展还 编辑:程序博客网 时间:2024/05/20 21:21

1.二叉树的遍历(traversing binary tree):

从根结点出发,按照某种次序依次访问各个结点,且每个结点有且仅被访问一次。

1)前序遍历:先访问各个根结点,顺序遍历左子树,再顺序遍历右子树。输出第一个为根节点。
2)中序遍历:从根节点开始,先遍历左子树,然后是遍历右子树,最后是节点;

3)后序遍历:先从左到右遍历叶子,然后到分支节点,最后是根节点。

2二叉树的建立

叶子的指针域是指向NULL的,但在建立二叉树时,需要判断该节点是否有左右孩子节点,因此将叶子结点的lchild和rchild指针指向一个虚拟的节点,并赋予特定的值来表示结束,以便于插入新的结点。

#include<stdio.h>#include<stdlib.h>#define endmark 1000//定义叶子的结束标志typedef int Elemtype ;typedef struct treenode//创建树节点的结构体{    Elemtype data;    struct treenode * lchild;    struct treenode * rchild;}treenode,*tree;void creattree(tree (*treeptr))//前序遍历{    Elemtype temp;//缓存输入    tree ptr;    scanf("%d",&temp);    if (temp==endmark)    {        *treeptr = NULL;        return;    }    else    {        ptr = (tree)malloc(sizeof(treenode));        ptr->data=temp;        *treeptr = ptr;        creattree(&(*treeptr)->lchild);//对左子树赋值        creattree(&(*treeptr)->rchild);//对右子树赋值    }}void PreOrderTraverse(tree treeptr)//前序遍历{    if (treeptr==NULL)    {        return;    }    else    {        printf("%d\n",treeptr->data);        PreOrderTraverse(treeptr->lchild);//对左子树赋值        PreOrderTraverse(treeptr->rchild);//对右子树赋值    }}void InOrderTraverse(tree treeptr)//中序遍历{    if (treeptr==NULL)    {        return;    }    else    {               InOrderTraverse(treeptr->lchild);//对左子树赋值        printf("%d\n",treeptr->data);        InOrderTraverse(treeptr->rchild);//对右子树赋值    }}void PostOrderTraverse(tree treeptr)//后序遍历{    if (treeptr==NULL)    {        return;    }    else    {               PostOrderTraverse(treeptr->lchild);//对左子树赋值        PostOrderTraverse(treeptr->rchild);//对右子树赋值        printf("%d\n",treeptr->data);    }}void main(){    tree treehead=NULL;    creattree(&treehead);//创建二叉树    printf("\n前序输出\n");    PreOrderTraverse((treehead));    printf("\n中序序输出\n");    InOrderTraverse(treehead);    printf("\n后序输出\n");    PostOrderTraverse(treehead);    system("pause");}

其中1000为结束标志 输入1、2、3、1000、1000、4、1000、1000、5、6、1000、1000、7、1000、1000

顺序输出为:1、2、3、4、5、6、7
中序输出为:3、2、4、1、6、5、7
后序输出为:3、4、2、6、7、5、1

0 0
原创粉丝点击