leetcode-504-Diameter of Binary Tree

来源:互联网 发布:java nexttoken 编辑:程序博客网 时间:2024/06/08 02:39

问题

题目:[leetcode-504]

思路

刚上来的时候做错了,因为觉得二叉树的直径一定要经过root。所以我求出了左右子树的深度,加起来获得答案。
思路是不对的,因为直接可能是不经过root的。这点很重要。
那么我的思路是,对于每一个节点,就出经过他的最大直径。
然后,二叉树的直接就是这些当中最大的。

代码

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    int diameterOfBinaryTree(TreeNode* root) {        if(!root) return 0;        else{            int max = 0;            dfs(root, max);            return max;        }    }private:    int depth(TreeNode* root){        if(!root) return 0;        else return std::max( depth(root->left), depth(root->right) ) + 1;    }    int helper(TreeNode* root){//经过root的最大直径        if(!root) return 0;        else return depth(root->left) + depth(root->right);    }    void dfs(TreeNode* root, int& ans){        if(!root) return;        else{            int tmp = helper(root);            ans = std::max(ans, tmp);            dfs(root->left, ans);            dfs(root->right, ans);        }    }};
0 0
原创粉丝点击