设为首页 加入收藏

TOP

一步一步写算法(之排序二叉树线索化) (三)
2014-11-23 23:36:40 来源: 作者: 【 】 浏览:50
Tags:步一步 算法 排序 线索
*ppTreeNode = pNode->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;

}

其中,寻找最大值节点和寻找父节点的代码如下所示:

TREE_NODE* get_max_node_of_one(TREE_NODE* pNode)

{

if(NULL == pNode)

return NULL;

while(pNode->right)

pNode = pNode->right;

return pNode;

}

TREE_NODE* get_parent_of_one(TREE_NODE* root, TREE_NODE* pNode)

{

if(NULL == root || NULL == pNode)

return NULL;

while(root){

if(pNode == root->left || pNode == root->right)

return root;

else if(pNode->data < root->data)

root = root->left;

else

root = root->right;

}

return NULL;

}

TREE_NODE* get_max_node_of_one(TREE_NODE* pNode)

{

if(NULL == pNode)

return NULL;

while(pNode->right)

pNode = pNode->right;

return pNode;

}

TREE_NODE* get_parent_of_one(TREE_NODE* root, TREE_NODE* pNode)

{

if(NULL == root || NULL == pNode)

return NULL;

while(root){

if(pNode == root->left || pNode == root->right)

return root;

else if(pNode->data < root->data)

root = root->left;

else

root = root->right;

}

return NULL;

}

总结:

(1)排序二叉树的序列化关键就是在二叉树节点添加前向指针和后继指针

(2)排序二叉树是空间换时间的典型案例

(3)排序二叉树是很多结构的基础,写多少遍都不为多,有机会朋友们应该多加练习

(4)测试用例的编写是代码编写的关键,编写程序的目的就是为了消除bug,特别是低级bug

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

评论

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