题意:
求一颗二叉树的直径。
Hint:直径并不一定过树根。
思路:
深搜。
设maxDeepth(TreeNode * root)表示以root为根的二叉树的最大深度,则对于一棵含有n个节点的树,经过树中的任何一个节点i(1 <= i <= n)的最长路径长度di=maxDepth(i->left) + maxDepth(i->right)。树的直径d = max(di)(1 <= i <= n)。
实现:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution 11 { 12 public: 13 int maxn = 0; 14 int dfs(TreeNode * root) 15 { 16 if(!root) 17 return 0; 18 int x = dfs(root->left); 19 int y = dfs(root->right); 20 maxn = max(maxn, x + y); 21 return max(x, y) + 1; 22 } 23 int diameterOfBinaryTree(TreeNode* root) 24 { 25 dfs(root); 26 return maxn; 27 } 28 };