代码随想录算法训练营第十二天| 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);
}
};