ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

0514

2022-05-15 00:36:28  阅读:122  来源: 互联网

标签:right TreeNode int 0514 nullptr 节点 left


101

/**
 * 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) {}
 * };
 * 给你一个二叉树的根节点 root , 检查它是否轴对称
 * 思路:1.若两个节点都为空,即说明经过一系列递归检查后,直到找到两边都为空都没检查出错误来,就说明在这个递归阶段暂时是相同的
 *      2.经过两个节点是否都为空的检查后(两个节点必定有一个不为空),再进行是否存在一个及以上节点为空的检查
 *      3.返回时,先进行两个节点的数值对比,再递归的检查下去
 */
class Solution {
private:
    bool sym(TreeNode* rt1,TreeNode* rt2){
        if(rt1== nullptr&&rt2== nullptr)return true;
        if(rt1== nullptr||rt2== nullptr)return false;
        return (rt1->val==rt2->val)
        &&sym(rt1->left,rt2->right)
        &&sym(rt1->right,rt2->left);
    }
public:
    bool isSymmetric(TreeNode* root) {
        sym(root,root);
    }
};

104

/**
 * 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 {
private:
    int depth(TreeNode* rt){
        if(rt== nullptr)return 0;
        int l=depth(rt->left);
        int r=depth(rt->right);
        return max(l,r)+1;
    }
public:
    int maxDepth(TreeNode* root) {

         return depth(root);
    }
};

543

/**
 * 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) {}
 * };
 * 求二叉树的直径
 * 1.二叉树的直径的定义是:二叉树左儿子的深度和右儿子深度之和
 * 2.二叉树的直径不一定穿过根节点
 * 例如:
 *      /
 *    /\               /\
 *  /  \ 中的直径应该为 /  \,并不包含根节点,所以需要引入Max局部变量记录每次递归的最大值(l+r)
 * if(l+r>Max)Max=l+r;
 * 因为有可能是加上根节点直径反而小了。
 * 以上图为例,存在这种情况即:1.根节点不存在右儿子,则若候选节点的右子树的深度>1就能使不通过根节点的直径大于通过根节点的直径
 *                        2.根节点存在右子树,则只要候选节点的右子树深度>1+根节点右子树的深度即可
*/
class Solution {
private:
    int Max=0;
    int depth(TreeNode* rt){
        if(rt==nullptr)
            return 0;
        int l=depth(rt->left);//递归求左儿子的深度
        int r=depth(rt->right);//递归求右儿子的深度
        if(l+r>Max)Max=l+r;
        return max(l,r)+1;//叶子节点的深度为 1
    }
public:
    int diameterOfBinaryTree(TreeNode* root) {
        depth(root);
        return Max;
    }
};

标签:right,TreeNode,int,0514,nullptr,节点,left
来源: https://www.cnblogs.com/ftwftw/p/_0514.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有