543 二叉樹的直徑

2021-10-09 06:55:09 字數 1136 閱讀 3952

題目描述:

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點。

示例 :

給定二叉樹

返回 3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。

**注意:**兩結點之間的路徑長度是以它們之間邊的數目表示。

方法1:

主要思路:

(1)最大路徑可能存在中間某個結點的位置,故需要一直保留每個節點處可以獲得的最大的直徑;

(2)對於輔助函式的返回值,則是在該節點下可以獲得的最大的深度是多少;

(3)故在輔助函式內,對於當前結點可以獲得的最大的直徑,是左子樹深度加上右子樹的深度;

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

//獲得左右子樹的最大深度

int left_path=

helper

(root-

>left,max_path)

;int right_path=

helper

(root-

>right,max_path)

; max_path=

max(max_path,left_path+right_path)

;//獲得當前結點下可能獲得的最大的直徑

return

max(left_path,right_path)+1

;//返回該結點下可以獲得最大的深度

}int

diameterofbinarytree

(treenode* root)

int max_path=0;

helper

(root,max_path)

;return max_path;}}

;

543 二叉樹的直徑

一種比較好的思路是。隨便找乙個點 一般取根節點 找到這棵樹中,距離這個點最遠的點,再從找到的這個點開始,找到距離它最遠的點。這種思路是帶有很強烈的數學成分。證明可自行解決。b站大佬是用動歸來做的,我不是很好理解。這裡給出一種基礎做法,即借助求二叉樹的深度的方式。對於每乙個節點,求其左右子樹的最大深度...

543 二叉樹的直徑

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。示例 給定二叉樹 1 2 3 4 5返回3,它的長度是路徑 4,2,1,3 或者 5,2,1,3 注意 兩結點之間的路徑長度是以它們之間邊的數目表示。分析 考慮分治法。先求某節點到其...

543 二叉樹的直徑

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。示例 給定二叉樹 1 2 3 4 5返回3,它的長度是路徑 4,2,1,3 或者 5,2,1,3 注意 兩結點之間的路徑長度是以它們之間邊的數目表示。class solution o...