#include <stdio.h>
#include <string.h>
#include <malloc.h>

typedef struct tree_node
{
    int value;
    struct tree_node *left;
    struct tree_node *right;
    struct tree_node *parent;
} node_t;

static int value = 0;

struct tree_node * __tree_create(int n)
{
    struct tree_node *tnode = NULL;

    if (n-- < 0)
    {
        return NULL;
    }

    tnode = (struct tree_node *)malloc(sizeof(struct tree_node));
    if (NULL == tnode)
    {
        return NULL;
    }
    tnode->value = value++;
    printf("%4d\n", tnode->value);
    tnode->left = __tree_create(n);
    tnode->right = __tree_create(n);

    return tnode;
}

void tree_dump(struct tree_node *t)
{
    if (NULL == t)
    {
        return;
    }
    tree_dump(t->left);
    tree_dump(t->right);
    printf("%4d\n", t->value);
}

void tree_free(struct tree_node *t)
{
    if (NULL == t)
    {
        return;
    }
    tree_free(t->left);
    tree_free(t->right);
    printf("free tnode %4d\n", t->value);
    memset(t, 0, sizeof(struct tree_node));
    free(t);
}

int tree_depth(struct tree_node *t)
{
    int a = 0;
    int b = 0;

    if (NULL == t)
    {
        return 0;
    }

    a = tree_depth(t->left);
    b = tree_depth(t->right);

    return (a > b ? a : b) + 1;

}

void __tree_dump_by_layer(struct tree_node *t, int level)
{
    if (NULL == t || level < 0)
    {
        return;
    }

    if (0 == level)
    {
        printf("%4d  ", t->value);
        return;
    }
    __tree_dump_by_layer(t->left, level-1);
    __tree_dump_by_layer(t->right, level-1);
}

int tree_node_number(int level)
{
    int i = 0;
    int ret = 1;

    if (level <= 0)
    {
        return 1;
    }
    for (i = 0; i < level; i++)
    {
        ret = ret * 2;
    }
    return ret;
}


void printkong(int depth, int level)
{
}

void tree_dump_by_layer(struct tree_node *t, int depth)
{
    int i = 0;
    printf("\n");
    printf("\n");
    for (i = 0; i <= depth; i++)
    {
        printkong(depth, i);
        __tree_dump_by_layer(t, i);
        printf("\n");
    }
    printf("\n");
}

struct tree_node *tree_get_null_node(struct tree_node *t)
{
    if (NULL == t)
    {
        return;
    }
    tree_dump(t->left);
    tree_dump(t->right);
    printf("%4d\n", t->value);
}

struct tree_node *tree_insert(struct tree_node *t,int x)
{
    struct tree_node *tnode = NULL;
    struct tree_node *nnode = NULL;
    if (NULL == tnode)
    {
        return NULL;
    }

    nnode = tree_get_null_node(tree_node);
    if (NULL == nnode)
    {
        printf("this not be happen\n");
        return NULL;
    }

    tnode =malloc(sizeof(struct tree_node));
    if (NULL == tnode)
    {
        printf("get mem failed\n");
        return NULL;
    }

    tnode->value = x;
    tnode->left = NULL;
    tnode->right = NULL;

    if (NULL == nnode->left)
    {
        nnode->left = tnode;
    }
    else if (NULL == nnode->right)
    {
        nnode->left = tnode;
    }
    return nnode;
}


int main(void)
{
    struct tree_node *tree = NULL;

    tree = __tree_create(3);
    if (NULL == tree)
    {
        perror("tree create failed");
        return 0;
    }

    tree_dump(tree);
    tree_dump_by_layer(tree, 3);
    printf("tree depth is %d\n", tree_depth(tree));
    tree_free(tree);

    return 0;
}

 

原文地址:https://www.cnblogs.com/sudochen/p/15935780.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于nodejs...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs怎么实现目录不存在自动创建”文章能帮助大...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs如何实现定时删除文件”文章能帮助大家解决疑惑...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文...
本篇内容主要讲解“怎么安装Node.js的旧版本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎...
这篇“node中的Express框架怎么安装使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家...
这篇文章主要介绍“nodejs如何实现搜索引擎”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs如何实现搜索引擎...
这篇文章主要介绍“nodejs中间层如何设置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs中间层如何设置”文...
这篇文章主要介绍“nodejs多线程怎么实现”,在日常操作中,相信很多人在nodejs多线程怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
这篇文章主要讲解了“nodejs怎么分布式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nodejs怎么分布式”...
本篇内容介绍了“nodejs字符串怎么转换为数组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情...
这篇文章主要介绍了nodejs如何运行在php服务器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇nodejs如何运行在php服务器文章都...
本篇内容主要讲解“nodejs单线程如何处理事件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“nodejs单线程如何...
这篇文章主要介绍“nodejs怎么安装ws模块”,在日常操作中,相信很多人在nodejs怎么安装ws模块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
本篇内容介绍了“怎么打包nodejs代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!
本文小编为大家详细介绍“nodejs接收到的汉字乱码怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs接收到的汉字乱码怎么解决”文章能帮助大家解...
这篇“nodejs怎么同步删除文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇...
今天小编给大家分享一下nodejs怎么设置淘宝镜像的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希