- 作者:邹祁峰
- 邮箱:Qifeng.zou.job@gmail.com
- 博客:http://blog.csdn.net/qifengzou
- 日期:2013.12.27 16:45
- 转载请注明来自"祁峰"的CSDN博客
1 引言
博文《算法导论 之 平衡二叉树 - 打印》中使用递归算法实现了平衡二叉树的打印功能,仿照此博文中的代码可快速实现红黑树打印和销毁的递归算法。虽然递归方式比较简单明了,但和非递归算法比起来,其效率偏低。为了提高对红黑树的处理效率,在此使用非递归算法实现对红黑树的打印和销毁功能,今后的二叉树算法的打印和销毁都可以仿照以下代码进行实现。对于该篇中出现的相关的数据结构、宏、枚举以及函数,可以在博文《通用栈的设计和实现》中找到定义和实现。[注:二叉树的处理都可以仿照此代码进行遍历和打印]
2 代码实现
因实现过程不太好用图形来表示,因此,直接在此给出源码。如果你不太理解其实现原理,请自己绘制堆栈图来慢慢理解。
2.1 打印过程
/******************************************************************************
**函数名称: rbt_print
**功 能: 打印红黑树(外部接口)
**输入参数:
** tree: 红黑树
**输出参数: NONE
**返 回: VOID
**实现描述:
**注意事项:
**作 者: # Qifeng.zou # 2013.12.27 #
******************************************************************************/
int rbt_print(const rbt_tree_t *tree)
{
int depth = 0;
Stack_t _stack, *stack = &_stack;
const rbt_node_t *node = tree->root, *parent = NULL;
if(tree->sentinel == node) return 0;
stack_init(stack, RBT_MAX_DEPTH);
while(tree-&