算法导论 之 红黑树 - 打印、销毁 - 非递归[C语言]


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-&
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值