leetcode-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) {}
 * };
 */

 // 这是求二叉树的宽度
// class Solution {
// public:
//     int diameterOfBinaryTree(TreeNode* root) {
//         int res = INT_MIN;
//         if(root==NULL)
//         return 0;
//         queue<TreeNode*> q;
//         q.push(root);
//         while(!q.empty()){

//             int len = q.size();
//             res = max(res, len);
//             while(len--){
//                 TreeNode* temp = q.front();
//                 q.pop();
//                 if(temp->left)
//                     q.push(temp->left);
//                 if(temp->right)
//                     q.push(temp->right);
//             }

//         }
//         return res;
//     }
// };


class Solution {
public:
    int res = 0;
    int diameterOfBinaryTree(TreeNode* root) {
        //int res = INT_MIN;
        if(root==NULL)
            return 0;
        depth(root);
        return res;
    }

    int depth(TreeNode* root){
        if(root==0)
            return 0;
        int left = depth(root->left);  // 左子树的深度
        int right = depth(root->right);  // 右子树的深度
        res = max(res, left+right);  // 将每个节点的最大直径与当前最大值直径比较
        return max(left,right)+ 1;  // 把上面一行去掉,这题就变成了求树的深度了
    }

};

 

posted @ 2021-07-25 14:39  三一一一317  阅读(33)  评论(0)    收藏  举报