先參考最長子序列求解方法,先序遍歷的時候,我們把當前遍歷的分支作為乙個序列,然後利用最長序列的方式求解。遞迴過程中,保留樹的高度,用高度差作為長度。注意遞迴結束時,需要從雜湊表中移除當前節點的值。
#include
#include
#include
#include
const
int tag =
-100
;struct node
, right
;node
(int n =0)
:val
(n),
left
(nullptr),
right
(nullptr)}
;std::unordered_map<
int,
int> ump;
// 儲存 累積和 與 高度
int num;
// 規定數字
int maxlen;
// 當前最長路徑長度
std::shared_ptr
createtreenode()
auto root = std::make_shared
(n);
root-
>left =
createtreenode()
; root-
>right =
createtreenode()
;return root;
}void
maxlenpath
(const std::shared_ptr
& root,
int h,
int presum)
int sum = presum + root-
>val;
// 當前分支作為乙個序列
int k = sum - num;
auto it = ump.
find
(k);
if(it == ump.
end())
else
}maxlenpath
(root-
>left, h +
1, sum)
;maxlenpath
(root-
>right, h +
1, sum)
; ump.
erase
(k);
// 刪除對應元素,因為已經停止這個分支了
}inline
void
print
(const std::vector<:shared_ptr>>
& vec)
std::cout << std::endl;
}int
main()
二叉樹 路徑
二叉樹中,從根節點到葉節點的每一條連線,我們稱之為路徑,最短路徑和最長路徑在之前的部落格中,我們已經完成了對他們的討論,現在我們討論一下,輸出一棵二叉樹中全部的路徑資訊。如下所示 public class operation childbinarytreepath root,return resul...
Binary Tree Paths二叉樹路徑
問題描述 given a binary tree,return all root to leaf paths.給定乙個二叉樹,返回所有從根節點到葉子節點的路徑。思路 深度優先遍歷中的前序遍歷 給定子樹,先訪問根節點,再訪問左節點,最後訪問右節點 非遞迴的實現方式通過堆疊輔助。由於題目要求返回所有 根...
二叉樹路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 1 返回 true,因為存在目標和為 22 的根節點到葉子節點的路徑 5 ...