歡迎點擊「算法與編程之美」↑關注我們!
本文首發於微信公衆號:"算法與編程之美",歡迎關注,及時瞭解更多此係列文章。
歡迎加入團隊圈子!與作者面對面!直接點擊!
問題描述
給你一棵二叉樹,每個節點的值爲 1 到 9 。稱二叉樹中的一條路徑是 「僞迴文」的,當它滿足:路徑經過的所有節點值的排列中,存在一個迴文序列。
請你返回從根到葉子節點的所有路徑中僞迴文路徑的數。
示列1:
圖示1.1
輸入: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] 。
解決方案
一開始的思路是遍歷二叉樹,記錄每個葉子節點的路徑,再求是否是僞迴文。
判斷僞迴文的方法很簡單,僞迴文只需要滿足一個條件,就是路徑中最多隻能有一個數是一個的,其他的都是兩個,比如[1,1,1,1,1,2] 1有5個是奇數,2有1個事奇數,所以不是僞迴文,[1,1,1,1,2,2]1有4個事偶數,2有兩個是偶數,所以是僞迴文。最後因爲先把路徑求出來再判斷有點浪費時間複雜度。所以可以在遍歷時就記錄數字的奇數個數就好。
python代碼:
class TreeNode:
|
結語
這道題就是二叉樹的遍歷和僞迴文的判斷,樹的遍歷基本上是用dfs來遍歷的,所以遇到二叉樹就要想到dfs或者bfs來遍歷,還有就是回溯的點,這道題很簡單,回溯的點就是葉子節點的時候就可以回溯了。
END
編 輯 | 王楠嵐
責 編 | 王自強
where2go 團隊
微信號:算法與編程之美
長按識別二維碼關注我們!
溫馨提示:點擊頁面右下角“寫留言”發表評論,期待您的參與!期待您的轉發!