1. 程式人生 > 其它 >leetcode 652. 尋找重複的子樹 題解 java實現

leetcode 652. 尋找重複的子樹 題解 java實現

技術標籤:演算法leetcode演算法java二叉樹

力扣 652. 尋找重複的子樹 題解 java實現

給定一棵二叉樹,返回所有重複的子樹。對於同一類的重複子樹,你只需要返回其中任意一棵的根結點即可。

兩棵樹重複是指它們具有相同的結構以及相同的結點值。

示例 1:

在這裡插入圖片描述

因此,你需要以列表的形式返回上述重複子樹的根結點。

思路

找到以當前節點的樹結構,然後存入HashMap裡面,順便記錄出現次數,當出現次數為1次的時候加入結果,找到當前根節點的樹結構用後序遍歷

class Solution {
    List<TreeNode> res = new LinkedList
<>(); //記錄次數 HashMap<String, Integer> map = new HashMap<>(); public List<TreeNode> findDuplicateSubtrees(TreeNode root) { traverse(root); return res; } public String traverse(TreeNode root){ //終止條件 if(root == null) return "#"
; String left = traverse(root.left); String right = traverse(root.right); //後序遍歷可以得到根節點的樹結構 String sub = left + "," + right + "," + root.val; //查找出現次數,沒有出現賦值為0 int i = map.getOrDefault(sub, 0); //只有出現次數為1的時候才會放入結果 if(i == 1) res.add
(root); //次數加一 map.put(sub, i+1); return sub; } }