赞
踩
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
链接:https://leetcode-cn.com/problems/diameter-of-binary-tree/
1)深度优先遍历
这道题是二叉树深度的变形。该题目可以理解为遍历的最多的节点的个数-1。
ans记录没遍历到的节点的个数,最后将个数-1就是结果。
/**
* 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 ans; int Height(TreeNode* root) { if(root == nullptr) return 0; int left = Height(root->left); int right = Height(root->right); ans = max(ans, left + right + 1); return max(left , right) + 1; } int diameterOfBinaryTree(TreeNode* root) { ans = 1; Height(root); return ans - 1; // 经过最多的节点-1 } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。