代码随想录算法训练营第十五天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数
1.代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素2.代码随想录算法训练营第二天| 977. 有序数组的平方、209. 长度最小的子数组、59. 螺旋矩阵 II3.代码随想录算法训练营第四天| 203. 移除链表元素、707.设计链表、206.反转链表4.代码随想录算法训练营第五天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交(同160题)、142.环形链表Ⅱ5.代码随想录算法训练营第六天| 242. 有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和6.代码随想录算法训练营第七天| 454. 两数相加Ⅱ、383.赎金信、15.三数之和、18.四数之和7.代码随想录算法训练营第八天|344.反转字符串、541.反转字符串Ⅱ、54.替换数字(卡码网是真滴不好用)8.代码随想录算法训练营第九天|151.反转字符串中的单词、55.右旋字符串、28.找出字符串中第一个匹配项的下标、459.重复的子字符串9.代码随想录算法训练营第十一天|232.用栈实现队列、225.用队列实现栈、20.有效的括号、1047.删除字符串中的所有相邻重复项10.代码随想录算法训练营第十二天|150.逆波兰表达式求值、239.滑动窗口最大值、347.前k个高频元素11.代码随想录算法训练营第十三天|今天量大管饱144、145、94、102、107、199、637、429、515、116、117、104、11112.代码随想录算法训练营第十四天| 226.翻转二叉树 、101. 对称二叉树、104.二叉树的最大深度 (优先掌握递归)、111.二叉树的最小深度
13.代码随想录算法训练营第十五天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数
110平衡二叉树
1 class Solution { 2 public: 3 int GetHeight(TreeNode* root) { 4 if (!root) { 5 return 0; 6 } 7 int leftHeight = GetHeight(root->left); 8 if (leftHeight == -1) return -1; // 如果左子树不平衡,直接返回 -1 9 10 int rightHeight = GetHeight(root->right); 11 if (rightHeight == -1) return -1; // 如果右子树不平衡,直接返回 -1 12 13 if (abs(leftHeight - rightHeight) > 1) { 14 return -1; 15 } 16 return max(leftHeight, rightHeight) + 1; 17 } 18 19 bool isBalanced(TreeNode* root) { 20 return GetHeight(root) != -1; 21 } 22 };
257二叉树的所有路径
1 class Solution { 2 public: 3 void preorder(TreeNode *root, vector<string> &res, string temp) { 4 if (root == nullptr) { 5 return; 6 } 7 if (!temp.empty()) { 8 temp += "->"; 9 } 10 temp += to_string(root->val); 11 if (root->left == NULL && root->right == NULL) { 12 res.push_back(temp); 13 return; 14 } 15 16 preorder(root->left, res, temp); 17 preorder(root->right, res, temp); 18 //push_back 是 std::vector 的方法 19 } 20 vector<string> binaryTreePaths(TreeNode* root) { 21 vector<string> res; 22 string temp = ""; 23 24 if (!root) { 25 return res; 26 } 27 preorder(root, res, temp); 28 return res; 29 } 30 };
404左叶子之和
1 class Solution { 2 public: 3 void preorder(TreeNode *root, int &sum, bool isLeft) { 4 if (root == nullptr) { 5 return; 6 } 7 // 巧妙地思路 加一个bool型来判断是不是左子节点 8 // 如果当前节点是叶子节点,并且是左子节点 9 if (root->left == nullptr && root->right == nullptr && isLeft) { 10 sum += root->val; 11 } 12 13 preorder(root->left, sum, true); // 遍历左子树,标记为左子节点 14 preorder(root->right, sum, false); // 遍历右子树,标记为非左子节点 15 } 16 17 int sumOfLeftLeaves(TreeNode* root) { 18 int sum = 0; 19 preorder(root, sum, false); // 根节点不是左子节点,所以初始标记为 false 20 return sum; 21 } 22 };
222完全二叉树的节点个数
1 class Solution { 2 private: 3 int getNodesNum(TreeNode* cur) { 4 if (cur == NULL) return 0; 5 int leftNum = getNodesNum(cur->left); // 左 6 int rightNum = getNodesNum(cur->right); // 右 7 int treeNum = leftNum + rightNum + 1; // 中 8 return treeNum; 9 } 10 public: 11 int countNodes(TreeNode* root) { 12 return getNodesNum(root); 13 } 14 };
自在飞花轻似梦
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端