码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树详解-1

时间:2015-09-24 12:51:11      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树有关的题目基本都可以用递归思想解决,当然有些题目非递归解法也应该掌握,如非递归遍历节点等等。本文努力对二叉树相关题目做一个较全的整理总结。

这是一个树的基本结构

typedef struct node{

    struct node * lchild;

    struct node * rchild;

    int  data;//可以换成任意数据类型

}BiTNode,*BiTree;

 

基本接口如下

/*生成节点*/

BiTNode *MakeNode(int item,BiTNode *lchild,BiTNode *rchild)

{

    BiTNode * pnode = (BiTNode *)malloc(sizeof(BiTNode));

    if(pnode)

    {

        pnode->data = item;

        pnode->lchild = lchild;

        pnode->rchild = rchild;

    }

    return pnode;

}

/*释放节点*/

void FreeNode(BiTNode *pnode)

{

    if(pnode!=NULL)

        free(pnode);

}

 

//设置左子树

BiTree SetLChild(BiTree parent,BiTree lchild)

{

    parent->lchild = lchild;

    return lchild;

}

 

/*设置右子树*/

BiTree SetRChild(BiTree parent,BiTree rchild)

{

    parent->rchild = rchild;

    return rchild;

}

下面开始二叉树的操作:

1.创建二叉树

   //节点数据

        BiTNode * n1 = MakeNode(10,NULL,NULL);

        BiTNode * n2 = MakeNode(20,NULL,NULL);

        BiTNode * n3 = MakeNode(30,n1,n2);

        BiTNode * n4 = MakeNode(40,NULL,NULL);

        BiTNode * n5 = MakeNode(50,NULL,NULL);

        BiTNode * n6 = MakeNode(60,n4,n5);

        BiTNode * n7 = MakeNode(70,NULL,NULL);

 

        //1.生成2叉树

        BiTree rootTree = InitBiTree(n7);

        SetLChild(rootTree, n3);

        SetRChild(rootTree, n6);

   2.遍历二叉树

  

//前序遍历

void PreOrderTraverse(BiTree pRoot)

{

    if(pRoot == NULL)

        return;

    printf("%d,",pRoot->data); // 访问根节点

    PreOrderTraverse(pRoot->lchild); // 前序遍历左子树

    PreOrderTraverse(pRoot->rchild); // 前序遍历右子树

}

 

//中序遍历

void InOrderTraverse(BiTree pRootNode)

{

    if(pRootNode == NULL)

    {

        return;

    }

    InOrderTraverse(pRootNode->lchild);

    printf("%d,",pRootNode->data);

    InOrderTraverse(pRootNode->rchild);

}

 

//后序遍历

void PostorderOrderTraverse(BiTree pRootNode)

{

    if(pRootNode == NULL)

    {

        return;

    }

    PostorderOrderTraverse(pRootNode->lchild);

    PostorderOrderTraverse(pRootNode->rchild);

    printf("%d,",pRootNode->data);

}

调用如下

    PreOrderTraverse(rootTree); printf("\n");

        InOrderTraverse(rootTree); printf("\n");

        PostorderOrderTraverse(rootTree); printf("\n");

 log:

  70,30,10,20,60,40,50,

  10,30,20,70,40,60,50,

  10,20,30,40,50,60,70,

 

 

 

二叉树详解-1

标签:

原文地址:http://www.cnblogs.com/menchao/p/4834795.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!