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