LeetCode 110平衡二叉树 257.二叉树的所有路径 404左叶子之和
创始人
2024-02-10 11:14:05

文章目录

        • 110平衡二叉树
          • c++ 代码实现
          • python 代码实现
        • 257.二叉树的所有路径
          • c++代码实现
          • python 代码实现
        • 404左叶子之和
          • c++ 代码实现
          • python 代码

110平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

示例 1:

img

输入:root = [3,9,20,null,null,15,7]
输出:true

示例 2:

img

输入:root = [1,2,2,3,3,null,null,4,4]
输出:false

示例 3:

输入:root = []
输出:true

提示:

  • 树中的节点数在范围 [0, 5000]
  • -104 <= Node.val <= 104
c++ 代码实现
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:// 递归三要素// 1.函数参数int getHeight(TreeNode *node) {// 停止条件if (node == nullptr) return 0;int leftH = getHeight(node->left);// 是否已超过 1 if (leftH == -1) return -1;int rightH = getHeight(node->right);// 是否已超过 1 if (rightH == -1) return -1;// 高度差是否超过 1 。大于返回 -1if (abs(leftH - rightH) > 1) {return -1;}else{// 计算当前最大return 1 + max(leftH, rightH);}}bool isBalanced(TreeNode* root) {return getHeight(root) == -1 ? false : true; }
};
python 代码实现
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def getHeight(self, root):if not root:return 0lh = self.getHeight(root.left)if lh == -1:return -1rh = self.getHeight(root.right)if rh == -1:return -1if abs(lh - rh) > 1:return -1else:return (1 + max(lh, rh))def isBalanced(self, root: Optional[TreeNode]) -> bool:if self.getHeight(root) == -1:return Falseelse:return True

257.二叉树的所有路径

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

示例 1:

img

输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]

示例 2:

输入:root = [1]
输出:["1"]

提示:

  • 树中节点的数目在范围 [1, 100]
  • -100 <= Node.val <= 100
c++代码实现
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:// 递归三要素。void path(TreeNode * node, vector& pathVec, vector& sPath) {// 最后也要加入pathVec.push_back(node->val);// 停止条件if (node->left == nullptr && node->right == nullptr) {// 组合字符串string str;for (int i = 0 ; i < pathVec.size() - 1; i++) {str += to_string(pathVec[i]);str += "->";}str += to_string(pathVec[pathVec.size() - 1]);sPath.push_back(str);return;}// 单次遍历if (node->left) {path(node->left, pathVec, sPath);// 回溯pathVec.pop_back();}if (node->right) {path(node->right, pathVec, sPath);pathVec.pop_back();}}vector binaryTreePaths(TreeNode* root) {vector pathVec;vector sPath;path(root, pathVec, sPath);return sPath;}
};
python 代码实现
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def __init__(self):self.intPath = []self.strPath = []def path(self, node):self.intPath.append(node.val)# 停止条件if not node.left and not node.right:# 组合字符串s = ""for i in range(len(self.intPath)-1):s += str(self.intPath[i])s += "->"s += str(self.intPath[len(self.intPath) - 1])self.strPath.append(s)returnif node.left:self.path(node.left)self.intPath.pop()if node.right:self.path(node.right)self.intPath.pop()def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:self.path(root)return self.strPath

404左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和。

示例 1:

img

输入: root = [3,9,20,null,null,15,7] 
输出: 24 
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

示例 2:

输入: root = [1]
输出: 0

提示:

  • 节点数在 [1, 1000] 范围内
  • -1000 <= Node.val <= 1000
c++ 代码实现
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int leaves(TreeNode * node) {// 停止条件if (node == nullptr) return 0;if (node->left == nullptr && node->right == nullptr) return 0;// 计算int leftVal = leaves(node->left);// 左叶子不为空,但是其左右孩子为空,就是最后的左叶子TreeNode * curNode = node->left;if (curNode != nullptr &&curNode->left == nullptr && curNode->right == nullptr) {leftVal = curNode->val;}// 计算int rightVal = leaves(node->right);int sum = leftVal + rightVal;return sum;}int sumOfLeftLeaves(TreeNode* root) {return leaves(root);}
};
python 代码
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:if not root:return 0if not root.left and not root.right:return 0lsum = self.sumOfLeftLeaves(root.left)if root.left != None and root.left.left == None and root.left.right==None:lsum = root.left.valrsum = self.sumOfLeftLeaves(root.right)return (lsum + rsum)

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...