数据结构 算法 递归

                           编写一个递归算法,删除二叉树中所有叶子结点。
 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);
        }
    }
}

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

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

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

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

//

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

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 ));
}
}