二叉树的递归套路

树形dp问题(二叉树套路)
对于一个二叉树求一个答案,都可以使用这种套路
==================================================
对于以x为头的子树(前提:可以跟x的左子树、右子树要信息)
步骤:
1)以x为头的子树想要得到答案,列可能性(可以跟左右要答案的)
2)要什么信息可以得到答案
3)如果左、右子树要求一样,信息即要求,若不一样,信息即全集
4)信息都有了,写代码
例1判断是否为满二叉树
可能性:x为头的二叉树的节点数=2的层数次方-1,则为满二叉树;否则不是
信息:左子树的层数和节点数,右子树的层数和节点数----------->加工我自己的信息:层数=max(左,右)+1;节点数:左+右+1
coding
class Info:信息
Info process:跟左子树和右子树分别要信息后,加工我自己的信息(在process里面一定要加NULL的判断,这个是递归的结束)
主函数:根据题目要求进行调用

class Info           //信息:层数和节点数
{
public:
    Info(int height, int Nodes)
    {
        this->height = height;
        this->Nodes = Nodes;
    }
public:
    int height;
    int Nodes;
};
Info process(TreeNode* x)   //加工自己的信息
{
    if (x == NULL)      //x是空的话就返回(0,0)
    {
        Info xinfo(0, 0);
        return xinfo;
    }

    Info leftInfo = process(x->left);          //跟左子树要信息
    Info rightInfo = process(x->right);        //跟右子树要信息

    int nodes = leftInfo.Nodes + rightInfo.height + 1;     //加工我自己的信息
    //int height = leftInfo.height ? leftInfo.height > rightInfo.height:rightInfo.height;
    int height = max(leftInfo.height, rightInfo.height);

    Info xinfo(nodes, height);
    return xinfo;
}

bool isFull(TreeNode* Head)        //主函数
{
    Info info = process(Head);
    int N = info.Nodes;
    int H = info.height;
    if (N == (2 ^ H - 1))
        return true;
    else return false;
}
全部评论

相关推荐

零OFFER战士:另一个版本查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务