thewhitenight
thewhitenight
采纳率62.5%
2016-01-07 13:49 阅读 1.8k
已采纳

数据结构 算法 递归

                           编写一个递归算法,删除二叉树中所有叶子结点。
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2016-01-07 14:00
     void foo(Node * node)
    {
        if (node->left != null)
        {
            if (node->left->left == null && node->left->right == null)
            {
                delete(node->left);
                node->left = null;
            }
            else
            {
                foo(node->left);
            }
        }
        if (node->right != null)
        {
            if (node->right->left == null && node->right->right == null)
            {
                delete(node->right);
                node->right = null;
            }
            else
            {
                foo(node->right);
            }
        }
    }
    
    点赞 4 评论 复制链接分享
  • CSDNXIAOS Robot-S 2016-01-07 13:51

    汉诺塔的问题,也是一个经典的递归算法问题。

    下面是自己总结的一张整体流程图。

    下面是代码,代码虽简单,但理解其内部运行原理很重要。

    //======================================================================

    //

    // Copyright (C) 2014-20......
    答案就在这里:【数据结构】递归算法—汉诺塔
    ----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

    点赞 评论 复制链接分享
  • cuiwei1026522829 另一花生 2016-01-07 14:03

    int BtreeDepth(BiTNode *BT){//求二叉树的深度
    if (BT==NULL)//空树则返回0
    return 0;
    else{
    int dep1=BtreeDepth(BT->lchild );//递归调用逐层分析
    int dep2=BtreeDepth(BT->rchild );
    if(dep1>dep2)
    return dep1+1;
    else
    return dep2+1;
    }
    }
    int Leave(BiTNode *BT){//求二叉树中的叶子节点数
    if (BT==NULL)
    return 0;
    else{
    if(BT->lchild ==NULL && BT->rchild ==NULL)
    return 1;
    else
    return(Leave(BT->lchild )+Leave(BT->rchild ));
    }
    }

    点赞 评论 复制链接分享

相关推荐