力扣 二叉樹中的偽回文路徑

2021-10-06 10:34:32 字數 1201 閱讀 4080

給你一棵二叉樹,每個節點的值為 1 到 9 。我們稱二叉樹中的一條路徑是 「偽回文」的,當它滿足:路徑經過的所有節點值的排列中,存在乙個回文序列。

請你返回從根到葉子節點的所有路徑中 偽回文 路徑的數目。

輸入:root = [2,3,1,3,1,null,1]

輸出:2

解釋:上圖為給定的二叉樹。總共有 3 條從根到葉子的路徑:紅色路徑 [2,3,3] ,綠色路徑 [2,1,1] 和路徑 [2,3,1] 。在這些路徑中,只有紅色和綠色的路徑是偽回文路徑,因為紅色路徑 [2,3,3] 存在回文排列 [3,2,3] ,綠色路徑 [2,1,1] 存在回文排列 [1,2,1] 。

輸入:root = [2,1,1,1,3,null,null,null,null,null,1]

輸出:1

解釋:上圖為給定二叉樹。總共有 3 條從根到葉子的路徑:綠色路徑 [2,1,1] ,路徑 [2,1,3,1] 和路徑 [2,1] 。這些路徑中只有綠色路徑是偽回文路徑,因為 [2,1,1] 存在回文排列 [1,2,1] 。

示例 3:

輸入:root = [9]

輸出:1

思路:map記錄路徑上值出現的次數,如果map裡有2個數以上出現的次數是奇數,則構不成回文路徑。

class

solution

void

dfs(treenode* root, unordered_map<

int,

int>

& vals,

int& ans)

dfs(root-

>left, vals, ans)

;dfs

(root-

>right, vals, ans)

; vals[root-

>val]--;

}bool

check

(unordered_map<

int,

int>

& vals)

return

true;}

};

力扣 對稱二叉樹

思路 我們可以實現這樣乙個遞迴函式,通過 同步移動 兩個指標的方法來遍歷這棵樹,pp 指標和 qq 指標一開始都指向這棵樹的根,隨後 pp 右移時,qq 左移,pp 左移時,qq 右移。每次檢查當前 pp 和 qq 節點的值是否相等,如果相等再判斷左右子樹是否對稱。class solution bo...

力扣1367 二叉樹中的列表

題目 給你一棵以 root 為根的二叉樹和乙個 head 為第乙個節點的鍊錶。如果在二叉樹中,存在一條一直向下的路徑,且每個點的數值恰好一一對應以 head 為首的鍊錶中每個節點的值,那麼請你返回 true 否則返回 false 一直向下的路徑的意思是 從樹中某個節點開始,一直連續向下的路徑。示例 ...

力扣124 二叉樹中的最大路徑和

路徑 被定義為一條從樹中任意節點出發,沿父節點 子節點連線,達到任意節點的序列。同乙個節點在一條路徑序列中至多出現一次 該路徑 至少包含乙個 節點,且不一定經過根節點。路徑和 是路徑中各節點值的總和。題目要求 給你乙個二叉樹的根節點 root 返回其最大路徑和 示例 1 輸入 root 1,2,3 ...