二叉樹最長路徑

2021-10-01 23:29:17 字數 1490 閱讀 2048

先參考最長子序列求解方法,先序遍歷的時候,我們把當前遍歷的分支作為乙個序列,然後利用最長序列的方式求解。遞迴過程中,保留樹的高度,用高度差作為長度。注意遞迴結束時,需要從雜湊表中移除當前節點的值。

#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 ...