在萬(wàn)網(wǎng)上域名了怎么做網(wǎng)站寧波網(wǎng)站推廣公司報(bào)價(jià)
Problem: 543. 二叉樹(shù)的直徑
文章目錄
- 題目描述
- 思路
- 復(fù)雜度
- Code
題目描述
思路
1.最大直徑 == 左子樹(shù)的最大深度 + 右子樹(shù)的最大深度;
2.定義一個(gè)變量maxDiameter記錄最大直徑,并編寫(xiě)一個(gè)遞歸函數(shù)maxDepth,利用樹(shù)的后序遍歷每次遞歸求取leftMax(左子樹(shù)的最大深度)和rightMax(右子樹(shù)的最大深度),同時(shí)更新maxDiameter(maxDiameter == max(maxDiameter, (leftMax + rightMax)));遞歸函數(shù)每次返回1 + max(leftMax, rightMax)
復(fù)雜度
時(shí)間復(fù)雜度:
O ( n ) O(n) O(n);其中 n n n為數(shù)的節(jié)點(diǎn)個(gè)數(shù)
空間復(fù)雜度:
O ( h ) O(h) O(h);其中 h h h為樹(shù)的高度
Code
/*** 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 {//Maximum recorded diameterint maxDiameter = 0;
public:/***Find the maximum diameter** @param root The root of binary tree* @return int*/int diameterOfBinaryTree(TreeNode* root) {maxDepth(root);return maxDiameter;}/*** Post-order traversal** @param root The root of binary tree* @return int*/int maxDepth(TreeNode* root) {if (root == nullptr) {return 0;}int leftMax = maxDepth(root -> left);int rightMax = maxDepth(root -> right);//After the order position, find the maximum diameterint myDiameter = leftMax + rightMax;maxDiameter = max(myDiameter, maxDiameter);return 1 + max(leftMax, rightMax);}
};