代码随想录算法训练营第十二天| 110.平衡二叉树、257. 二叉树的所有路径、 404.左叶子之和、 222.完全二叉树的节点个数

代码随想录算法训练营第十二天| 110.平衡二叉树、257. 二叉树的所有路径、 404.左叶子之和、 222.完全二叉树的节点个数

110.平衡二叉树

题目

给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
题目链接

解法

class Solution
{
public:
    int getHeight(TreeNode *node)
    {
        if (node == NULL)
            return 0;
        int leftHeight = getHeight(node->left);
        if (leftHeight == -1)
            return -1;
        int rightHeight = getHeight(node->right);
        if (rightHeight == -1)
            return -1;
        return abs(leftHeight - rightHeight) > 1 ? -1 : 1 + max(leftHeight, rightHeight);
    }
    bool isBalanced(TreeNode *root)
    {
        return getHeight(root) == -1 ? false : true;
    }
};

257. 二叉树的所有路径

题目

给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
题目链接

解法

class Solution
{
public:
    bool compare(TreeNode *left, TreeNode *right)
    {
        if (left == NULL && right != NULL)
            return false;
        else if (left != NULL && right == NULL)
            return false;
        else if (left == NULL && right == NULL)
            return true;
        else if (left->val != right->val)
            return false;

        bool outside = compare(left->left, right->right);
        bool inside = compare(left->right, right->left);
        bool isSame = outside && inside;
        return isSame;
    }
    bool isSymmetric(TreeNode *root)
    {
        if (root == NULL)
            return true;
        return compare(root->left, root->right);
    }
};

404.左叶子之和

题目

计算给定二叉树的所有左叶子之和。
题目链接

解法

class Solution
{
public:
    int sumOfLeftLeaves(TreeNode *root)
    {
        if (root == NULL)
            return 0;
        if (root->left == NULL && root->right == NULL)
            return 0;

        int leftValue = sumOfLeftLeaves(root->left);
        if (root->left && !root->left->left && !root->left->right)
        {
            leftValue = root->left->val;
        }
        int rightvalue = sumOfLeftLeaves(root->right);
        int sum = leftValue + rightvalue;
        return sum;
    }
};

222.完全二叉树的节点个数

给出一个完全二叉树,求出该树的节点个数。

示例 1:
输入:root = [1,2,3,4,5,6]
输出:6

示例 2:
输入:root = []
输出:0

示例 3:
输入:root = [1]
输出:1

提示:
树中节点的数目范围是[0, 5 * 10^4]
0 <= Node.val <= 5 * 10^4
题目数据保证输入的树是 完全二叉树

解法

class Solution
{
public:
    int getNodesNum(TreeNode *cur)
    {
        if (cur == NULL)
            return 0;
        int leftNum = getNodesNum(cur->left);
        int rightNum = getNodesNum(cur->right);
        int treeNum = leftNum + rightNum + 1;
        return treeNum;
    }
    int countNodes(TreeNode *root)
    {
        return getNodesNum(root);
    }
};
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值