设为首页 加入收藏

TOP

一步一步写算法(之排序二叉树线索化) (四)
2014-11-23 23:36:40 来源: 作者: 【 】 浏览:51
Tags:步一步 算法 排序 线索
Node->left;

}else{

pLeftMaxParent = get_parent_of_one(*ppTreeNode, pLeftMax);

pNode->data = pLeftMax->data;

pLeftMaxParent->right = NULL;

pNode = pLeftMax;

}

}

goto final;

}

pNode = _delete_node_from_tree(*ppTreeNode, pNode);

final:

set_link_for_delete(pNode);

free(pNode);

return TRUE;

}

void set_link_for_delete(TREE_NODE* pNode)

{

if(pNode->prev){

if(pNode->next){

pNode->prev->next = pNode->next;

pNode->next->prev = pNode->prev;

}else

pNode->prev->next = NULL;

}else{

if(pNode->next)

pNode->next->prev = NULL;

}

}

TREE_NODE* _delete_node_from_tree(TREE_NODE* root, TREE_NODE* pNode)

{

TREE_NODE* pLeftMax;

TREE_NODE* pLeftMaxParent;

TREE_NODE* pParent = get_parent_of_one(root, pNode);

if(NULL == pNode->left && NULL == pNode->right){

if(pNode == pParent->left)

pParent->left = NULL;

else

pParent->right = NULL;

}else if(NULL != pNode->left && NULL == pNode->right){

if (pNode == pParent->left)

pParent->left = pNode->left;

else

pParent->right = pNode->left;

}else if(NULL == pNode->left && NULL != pNode->right){

if(pNode == pParent->left)

pParent->left = pNode->right;

else

pParent->right = pNode->right;

}else{

pLeftMax = get_max_node_of_one(pNode->left);

if(pLeftMax == pNode->left){

pNode->left->right = pNode->right;

if(pNode == pParent->left)

pParent->left = pNode->left;

else

pParent->right = pNode->left;

}else{

pLeftMaxParent = get_parent_of_one(root, pLeftMax);

pNode->data = pLeftMax->data;

pLeftMaxParent->right = NULL;

pNode = pLeftMax;

}

}

return pNode;

}

STATUS delete_node_from_tree(TREE_NODE** ppTreeNode, int data)

{

TREE_NODE* pNode;

TREE_NODE* pLeftMax;

TREE_NODE* pLeftMaxParent;

if(NULL == ppTreeNode || NULL == *ppTreeNode)

return FALSE;

if(NULL == (pNode = find_data_in_tree(*ppTreeNode, data)))

return FALSE;

if(pNode == *ppTreeNode){

if(NULL == pNode->left && NULL == pNode->right)

*ppTreeNode = NULL;

else if(NULL != pNode->left && NULL == pNode->right)

*ppTreeNode = pNode->left;

else if(NULL == pNode->left && NULL != pNode->right)

*ppTreeNode = pNode->right;

else {

pLeftMax = get_max_node_of_one(pNode->left);

if(pNode->left == pLeftMax){

pNode->left->right = pNode->right;

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言学习笔记(二)--数据类型、.. 下一篇一步一步写算法(之hash表)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: