设为首页 加入收藏

TOP

二叉树的实现与分析(源码及解析)(二)
2018-01-17 13:05:25 】 浏览:311
Tags:实现 分析 源码 解析
_right(BiTree *tree,BiTreeNode *node,void *data)
{
    BiTreeNode *new_node, **position;
    /*决定将结点插入哪一位置*/
    if(node == NULL)
    {
        /*仅允许在空树中插入根结点*/
        if(bitree_size(tree)>0)
        return -1;
   
        position = &tree->root;
    }
    else
    {
    /*通常只允许在一个分支的末端进入插入*/
        if(bitree_right(node)!=NULL)
        return -1;


        position = &node->right;
    }
   
    /*为结点分配空间*/
    if((new_node = (BiTreeNode*)malloc(sizeof(BiTreeNode)))==NULL)
        return -1;


    /*将结点插入树中*/
    new_node->data = (void*)data;
    new_node->left = NULL;
    new_node->right = NULL;
    *position = new_node;


    tree->size++;
    return 0;
}


/*bitree_rem_left  移除以指定结点的左子结点为根的子树*/
void bitree_rem_left(BiTree *tree,BiTreeNode *node)
{
    BiTreeNode **position;
   
    /*从一颗空树中移除节点是不被允许的*/
    if(bitree_size == 0)
        return;
   
    /*决定从何处移除分支*/
    if(node == NULL)
        position = &tree->root;
    else
        position = &node->left;


    /*按后序遍历的顺序移除分支*/
    if(*position != NULL)
    {
        bitree_rem_left(tree,*position);
        bitree_rem_right(tree,*position);


        if(tree->destroy != NULL)
        {
            /*调用自定义的析构函数释放动态空间*/
            tree->destroy((*position)->data);
        }


        free(*position);
        *position = NULL;
       
        tree->size--;
    }
    return;
}



/*bitree_rem_left  移除以指定结点的右子结点为根的子树*/
void betree_rem_right(BiTree *tree,BiTreeNode *node)
{
    BiTreeNode **position;


    if(bitree_size(tree) == 0)
        return ;


    if(node == NULL)
        position = &tree->root;
    else
        position = &node->right;


    if(position != NULL)
    {
        bitree_rem_left(tree,*position);
        bitree_rem_right(tree,*position);


        if(tree->destroy != NULL)
        {
            tree->destroy((*position)->data);
        }
 
        free(*position);
        *position = NULL;


        tree->size--;
    }
    return ;
}


/*bitree_merge  将两颗二叉树合并为单颗二叉树*/
int bitree_merge(BiTree *merge, BiTree *left, BiTree *right, const void *data)
{
    /*初始化合并树*/
    bitree_init(merge,left->destroy);


    /*将传入的data插入到新树的根结点中*/
    if(bitree_ins_left(mer

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇二叉树的实现与分析(源码及解析) 下一篇二叉树的概念、算法简介及树的平衡

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目