二叉树的操作

二叉树是最多有两个孩子节点的类型的树

二叉树的思想延伸有很多,最经典的就是二分查找了,还有就是用决策树来判断比较排序的最优时间复杂度。等等。我就把不一一列举了(囧~当然也列举不完)。

今天用了将近半天的时间把二叉树的很多操作都实现了一下。有些非递归的真的是不好做,也不是很好想,开始做前序非递归我绞尽脑汁~~想了很久也没有想出来,后来大多都是听老师或者百度后才知道原来是这么写的。其实非递归写的真的不多,毕竟c语言短小精悍!但是要真正掌握c的要义以后还是要多多加强练习,希望以后自己可以能够自己想出来做出来。

由于代码比较多,(其实我觉得多,毕竟太多大家也找不到重要的)本文全部写递归思想

下一篇会补上其他的非递归。

闲言少叙,开始正式的代码之旅:

1.建树:这个是方法老师给我们讲的,和之前网上看到的略有不同之处

二叉树是一棵最多只有两个孩子节点类型的树。

很多算法都是可以用二叉树来描述,最经典的莫非二分查找算法了。二叉树还可以用作决策树

//创建节点
static Tree_node *create_node(void)
{
    Tree_node *node = (Tree_node *)Malloc(sizeof(Tree_node));

    bzero(node,sizeof(Tree_node));//是库函数strings.h(是的你没有看错,后面有s)的函数。作用是把n个数据块清0
    return node;
}
//注意使用二级指针,因为如果传*str这个字符串,递归回退的时候参数str指向
//没有变化。只有使用二级指针,使得指向发生变化,才能让它向后移动。
Tree create_tree(const char **str)
{
    //根据字符串创建一个二叉树
    //a#bc##d##
    //       a
    //        \
    //         b
    //        / \
    //       c   d
    //先让根为NULL,如果不是'#'那么在创建节点并且赋值
    Tree root = NULL;

    if(**str != '#' && str != NULL && *str != NULL){
        root = create_node();
        root->ele = **str;

        //指针指向字符串的下一个位置,然后创建左子树
        ++*str;
        root->left = create_tree(str);
        //如果为'#'就转到这里,创建右子树。
        ++*str;
        
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值