刷題543. Diameter of Binary Tree

一、題目說明

題目543. Diameter of Binary Tree,計算二叉樹的直徑。直徑是任意兩個節點間的路徑的最大值。難度是Easy!

二、我的解答

這個題目看懂不難,計算左子樹的高度,右子樹的高度,直徑爲二者之和。這裏要注意的是,要計算每個節點的直徑人,然後求最大直徑,而不是單求樹根的直徑。

class Solution{
	public:
		int diameterOfBinaryTree(TreeNode* root){
			depth = 1;
			dfs(root);
			return depth-1;
		}
		//計算二叉樹的深度 
		int dfs(TreeNode* root){
			if(root == NULL) return 0;
			int left = dfs(root->left);
			int right = dfs(root->right);
			depth = max(left+right+1,depth);
			return max(left,right)+1;
		}
	private:
		int depth;
};
Runtime: 0 ms, faster than 100.00% of C++ online submissions for Diameter of Binary Tree.
Memory Usage: 19.7 MB, less than 92.59% of C++ online submissions for Diameter of Binary Tree.

三、優化措施

加上註釋的代碼:

class Solution{
	public:
		int diameterOfBinaryTree(TreeNode* root){
			dfs(root);
			return depth;
		}
		//計算二叉樹的深度,類似後續遍歷,表示以當前走到root爲根節點,左右兩邊較長的路徑 
		int dfs(TreeNode* root){
			if(root == NULL) return 0;
			int left = dfs(root->left);
			int right = dfs(root->right);
			depth = max(left+right,depth);//計算節點直徑,並更新depth的值,這裏多加了個1 
			return max(left,right)+1;
		}
	private:
		int depth=0;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章