树的几种递归形式总结

第一种:层次型递归:

树结点的左子树和右子树是按顺序递归的

例题:求解树的叶子结点数;树的前序、中序、后序递归方法(n叉树可以对应写出代码)

void func(node* root)
{
     //添加对root的具体操作(可与下面代码交换位置)
     func(root->left);
     func(root->right);
}      
 

第二种:并列型递归(非常漂亮的代码)

树结点的左子树和右子树的递归有“求和”、“或者”等关系

例题:求树总的结点数目、路径总和

int func(node* root)
{
    return func(root->left)+func(root->right)+1;   //求树的总结点数
    return func(root->left)||func(root->right);    //求根到叶子路径和形式
}

第三种:有反馈型递归

树结点的左子树和右子树不仅有关系,而且还是有反馈形式的,更复杂。

例题:求树的最大深度、最小深度;求二叉搜索树的公共祖先结点;求二叉树的公共祖先结点

node* func(node* root)
{  
     node* left=func(root->left);
     node* right=func(root->right);
     //此处添加left和right的具体操作形式
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值