| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 473 人关注过本帖
标题:初学数据结构发表一下个人的看法。
只看楼主 加入收藏
wengege
Rank: 2
等 级:论坛游民
帖 子:148
专家分:93
注 册:2012-7-23
结帖率:89.47%
收藏
已结贴  问题点数:10 回复次数:3 
初学数据结构发表一下个人的看法。
# include <stdio.h>
# include <malloc.h>



 struct BTnode {
              char data;
              struct BTnode * Lchild;
              struct BTnode * Rchild;
};


struct BTnode * BTnode_Create(void);
void Ftraverse(struct BTnode *pBT);
void Mtraverse(struct BTnode *pBT);
void Etraverse(struct BTnode *pBT);

int  main(void)
{
    struct BTnode * Root = BTnode_Create();

    printf("先序遍历:\n");
    Ftraverse(Root); /* 先序遍历二叉树 */
    printf("\n中序遍历:\n");
    Mtraverse(Root); /* 中序遍历二叉树 */
    printf("\n后序遍历:\n");
    Etraverse(Root); /* 后序遍历二叉树 */

    return 0;

}


/*
*
*
*函数功能:静态生成二叉树
*
*备注:
*
*/
struct BTnode * BTnode_Create(void)
{
    struct BTnode * A_BTnode = (struct BTnode *)malloc(sizeof(struct BTnode));
    struct BTnode * B_BTnode = (struct BTnode *)malloc(sizeof(struct BTnode));
    struct BTnode * C_BTnode = (struct BTnode *)malloc(sizeof(struct BTnode));
    struct BTnode * D_BTnode = (struct BTnode *)malloc(sizeof(struct BTnode));
    struct BTnode * E_BTnode = (struct BTnode *)malloc(sizeof(struct BTnode));

    A_BTnode->data = 'A';
    A_BTnode->Lchild  = B_BTnode;
    A_BTnode->Rchild = C_BTnode;
    B_BTnode->data = 'B';
    B_BTnode->Lchild = NULL;
    B_BTnode->Rchild = NULL;
    C_BTnode->data = 'C';
    C_BTnode->Lchild = D_BTnode;
    C_BTnode->Rchild = NULL;
    D_BTnode->data = 'D';
    D_BTnode->Lchild = NULL;
    D_BTnode->Rchild = E_BTnode;
    E_BTnode->data = 'E';
    E_BTnode->Lchild = NULL;
    E_BTnode->Rchild = NULL;
    return A_BTnode;
}

/*
*
*
*函数功能:先序遍历二叉树
*
*备注:
*
*/
void Ftraverse(struct BTnode *pBT)
{
    if (NULL != pBT)
    {

        printf("%c\n", pBT->data );        
   
        if (NULL != pBT->Lchild)
            Ftraverse(pBT->Lchild );   
        
        if (NULL != pBT->Rchild)
            Ftraverse(pBT->Rchild );   
    }
}


/*
*
*
*函数功能:中序遍历二叉树
*
*备注:
*
*/
void Mtraverse(struct BTnode *pBT)
{
    if (NULL != pBT)
    {
        if (NULL != pBT->Lchild)
            Mtraverse(pBT->Lchild );

        printf("%c\n", pBT->data );

        if (NULL != pBT->Rchild)
            Mtraverse(pBT->Rchild );
    }

}

/*
*
*
*函数功能:后序遍历二叉树
*
*备注:
*
*/
void Etraverse(struct BTnode *pBT)
{
    if (NULL != pBT)
    {
        if (NULL != pBT->Lchild)
            Etraverse(pBT->Lchild );

        if (NULL != pBT->Rchild)
            Etraverse(pBT->Rchild );

        printf("%c\n", pBT->data );
    }

}
借着空余时间开始学习数据结构的一些基础知识, 看完书籍后就开始敲出一段二叉树的一些操作函数。 遍历二叉树时用到了递归, 就中序遍历而言就是先遍历根节点然后遍历左子树 最后 遍历右子树。这里我的理解是因为求解过程的模型就是一个递归, 所以用到递归时并不需要考虑每一步怎么实现的,因为递归能做好! 一点看法 希望前辈能提点建议。。。


搜索更多相关主题的帖子: include 二叉树 
2012-12-25 21:57
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:10 
用递归比较容易实现,不过不一定要用递归的

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-25 22:13
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
跟了个贴,发现回复次数为0 ,奇怪~

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-26 10:20
wengege
Rank: 2
等 级:论坛游民
帖 子:148
专家分:93
注 册:2012-7-23
收藏
得分:0 
回复 3楼 yuccn
呵呵, 之前有段话说错了 是先序遍历才是。前面讨论遍历二叉树用到递归的原因是我能理解递归,但是有些本来属于递归模型的问题我不能归纳为递归, 比如汉诺塔问题一直有些疑惑,有时候进入误区总是思考怎么去实现的。。。 希望版主能谈谈用递归的一些看法。。

打好基础,学会站在巨人的肩膀上!
2012-12-26 12:04
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
数的先中 后序 的变量,用递归都是比较方便的实现,
借助一个栈或者队列,也可以实现非递归的变量的

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-26 16:36
快速回复:初学数据结构发表一下个人的看法。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016572 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved