題目力扣鏈結
給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。 這條路徑可以經過也可以不經過根節點。
注意:兩個節點之間的路徑長度由它們之間的邊數表示。
例項1:
輸入:
輸出 : 2
輸入:看到二叉樹的題,首先要想到遞迴。首先,要想得到等值路徑,需要該節點的左孩子的等值路徑和該節點右孩子的等值路徑。若該節點的值和左右孩子的值相同的話,那麼把左右子樹等值路徑相加,然後比較這次的等值路徑和當前最大等值路徑的大小,若比當前最大等值路徑大,則更新。
/**
* * definition for a binary tree node. *
* struct treenode
* * }; */
*class
solution
*int left=
path
(t->left,t-
>val)
;//求左子樹最長路徑長度
*int right=
path
(t->right,t-
>val)
;//求右子樹最長等值路徑長度
* max_path=
max(max_path,left+right)
;//返回當前所要求的最長等值路徑 *if
(t->val==val)
//如果是等值的話,返回t的左子樹和右子樹路徑長度(算當前節點)的最大值 **
return0;
//不是等值的直接返回0 *}
*int
longestunivaluepath
(treenode* root)**
path
(root,root-
>val)
;* cout<
*return max_path;*}*};
執行用時 :132 ms, 在所有 cpp 提交中擊敗了99.48% 的使用者
記憶體消耗 :49.6 mb, 在所有 cpp 提交中擊敗了82.94%的使用者
最長同值路徑
給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。這條路徑可以經過也可以不經過根節點。注意 兩個節點之間的路徑長度由它們之間的邊數表示。示例 1 輸入 5 4 5 1 1 5輸出 2示例 2 輸入 1 4 5 4 4 5輸出 2注意 給定的二叉樹不超過10000個結點。樹的高度不超過1...
687 最長同值路徑
給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。這條路徑可以經過也可以不經過根節點。注意 兩個節點之間的路徑長度由它們之間的邊數表示。示例 1 輸入 5 4 5 1 1 5 輸出 2示例 2 輸入 1 4 5 4 4 5 輸出 2注意 給定的二叉樹不超過10000個結點。樹的高度不超...
遞迴 最長同值路徑
給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。這條路徑可以經過也可以不經過根節點。注意 兩個節點之間的路徑長度由它們之間的邊數表示。輸入 輸出 2 輸入 輸出 2 注意 給定的二叉樹不超過10000個結點。樹的高度不超過1000。最長的路徑有三種情況 1.在左子樹內部 2.在右子樹...