• Day11: 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 222.完全二叉树的节点个数



    题目110. 平衡二叉树 - 力扣(LeetCode)

    1. /**
    2. * Definition for a binary tree node.
    3. * struct TreeNode {
    4. * int val;
    5. * TreeNode *left;
    6. * TreeNode *right;
    7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
    8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10. * };
    11. */
    12. class Solution {
    13. public:
    14. //求节点高度
    15. int gethigh(TreeNode* root)
    16. {
    17. if(root==nullptr)
    18. {
    19. return 0;
    20. }
    21. int left=gethigh(root->left);
    22. if(left==-1)
    23. {
    24. return -1;
    25. }
    26. int right=gethigh(root->right);
    27. if(right==-1)
    28. {
    29. return -1;
    30. }
    31. if(abs(left-right)>1)
    32. {
    33. return -1;
    34. }
    35. return left>right?left+1:right+1;
    36. }
    37. //求节点差值
    38. bool isBalanced(TreeNode* root) {
    39. return gethigh(root)==-1?false:true;
    40. }
    41. };

    题目257. 二叉树的所有路径 - 力扣(LeetCode)

    1. /**
    2. * Definition for a binary tree node.
    3. * struct TreeNode {
    4. * int val;
    5. * TreeNode *left;
    6. * TreeNode *right;
    7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
    8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10. * };
    11. */
    12. class Solution {
    13. public:
    14. void count(TreeNode*root,vector<int>&vec,vector&res)
    15. {
    16. if(root==nullptr)
    17. {
    18. return ;
    19. }
    20. //如果不是空
    21. vec.push_back(root->val);//记录经过的路径
    22. count(root->left,vec,res);
    23. if(root->right==nullptr&&root->left==nullptr)
    24. {
    25. string s;
    26. for(int i=0;isize()-1;i++)
    27. {
    28. s+=to_string(vec[i]);
    29. s+="->";
    30. }
    31. s+=to_string(vec[vec.size()-1]);
    32. res.push_back(s);
    33. //vec.pop_back();
    34. }
    35. count(root->right,vec,res);
    36. vec.pop_back();
    37. }
    38. vector binaryTreePaths(TreeNode* root) {
    39. //回溯
    40. vector<int> vec;
    41. vector res;
    42. count(root,vec,res);
    43. return res;
    44. }
    45. };

    题目404. 左叶子之和 - 力扣(LeetCode)

    1. /**
    2. * Definition for a binary tree node.
    3. * struct TreeNode {
    4. * int val;
    5. * TreeNode *left;
    6. * TreeNode *right;
    7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
    8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10. * };
    11. */
    12. class Solution {//这个需要多练几遍,理解一下思路
    13. public:
    14. int sumleft(TreeNode*root)
    15. {
    16. if(root==nullptr)
    17. {
    18. return 0;
    19. }
    20. int lsum=sumleft(root->left);
    21. if(root->left!=nullptr&&root->left->left==nullptr&&root->left->right==nullptr)
    22. {
    23. lsum = root->left->val;//注意根节点左子树只有一个节点的情况
    24. }
    25. int rsum=sumleft(root->right);
    26. return lsum+rsum;
    27. }
    28. int sumOfLeftLeaves(TreeNode* root) {
    29. return sumleft(root);
    30. }
    31. };

    题目222. 完全二叉树的节点个数 - 力扣(LeetCode)

    1. /**
    2. * Definition for a binary tree node.
    3. * struct TreeNode {
    4. * int val;
    5. * TreeNode *left;
    6. * TreeNode *right;
    7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
    8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10. * };
    11. */
    12. class Solution {
    13. public:
    14. int count(TreeNode* root)
    15. {
    16. if(root==nullptr)
    17. {
    18. return 0;
    19. }
    20. int left=count(root->left);
    21. int right=count(root->right);
    22. return left+right+1;
    23. }
    24. int countNodes(TreeNode* root) {
    25. return count(root);
    26. }
    27. };

    最后

    二叉树的所有路径,第一次接触回溯题目,需要再多写几遍

    注意二叉树的高度和深度是怎么求,递归法需要安全掌握,迭代法二刷的时候过一遍

  • 相关阅读:
    创意写作类国际竞赛有哪些?
    说说TIME_WAIT和CLOSE_WAIT区别
    css调整字体间距 以及让倾斜字体
    [附源码]计算机毕业设计面包连锁店管理系统Springboot程序
    【面试题】线程池
    105AspectRatio调整宽高比组件_flutter
    centos安装mysql5.7(2022年更新)
    2022/8/4 考试总结
    PowerDesigner反向导入表+PowerDesigner的ER图设计+PowerDesigner连接外键的线(版本16.5)
    C/C++总结笔记——关键字3:malloc/free、new/delete、malloc&new区别、内存泄漏
  • 原文地址:https://blog.csdn.net/vpurple_/article/details/140465598