国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

力扣(LeetCode)652

Noodles / 1829人閱讀

摘要:對于同一類的重復子樹,你只需要返回其中任意一棵的根結點即可。兩棵樹重復是指它們具有相同的結構以及相同的結點值。這里再用存儲,鍵序列化結果,值樹節點組成的鏈表。

題目地址:
https://leetcode-cn.com/probl...
題目描述:
給定一棵二叉樹,返回所有重復的子樹。對于同一類的重復子樹,你只需要返回其中任意一棵的根結點即可。

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

示例 1:

    1
   / 
  2   3
 /   / 
4   2   4
   /
  4

下面是兩個重復的子樹:

  2
 /
4

4

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

解答:
如何判斷兩棵樹是重復的?只要兩棵樹的先序(各種序都可以)遍歷結果是一樣的,那么這兩棵樹就是重復的?
不一定!!!

  2
 /
4


2

4
它們的先序遍歷結果就是相同的,但是并不重復。為什么?因為遍歷的時候忽略掉了空樹的位置。
但是如果先序訪問這個樹的時候保留空樹(也就是訪問空樹),那么此時就成立了!先序遍歷樹并
且對它進行序列化,空樹的序列化結果為" ",而對于任意節點root它的序列化結果為"root.val 左子樹序列化 右子樹序列化"。這里再用hashmap存儲,鍵:序列化結果,值:樹節點組成的鏈表。最后序列化完,遍歷這個hashmap,找到hashmap中,值(鏈表)長度大于1的位置,把這個位置鏈表的第一個節點放入答案集,按照這個思路就能理解下面的代碼:
java ac代碼:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    HashMap> map = new HashMap(1000);

    public List findDuplicateSubtrees(TreeNode root) {
        serialize(root);
        List ans = new ArrayList(1000);
        for(Map.Entry> entry:map.entrySet())
            if(entry.getValue().size()>1)
            ans.add(entry.getValue().get(0) );
        return ans;
    }
    
    public String serialize(TreeNode root)
    {
        if(root == null)return " ";
        String temp = root.val+" "+serialize(root.left)+" "+serialize(root.right);
        if(map.get(temp) == null){
            List list = new LinkedList();
            list.add(root);
            map.put(temp,list);
        }
        else map.get(temp).add(root);
        return temp;
    }
    
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73010.html

相關文章

  • LeetCode 二叉樹專項】尋找重復的子樹(652

    摘要:文章目錄題目示例說明限制解法一分析實現復雜度題目給定一棵二叉樹的根節點,請返回所有的重復子樹。示例示例輸入輸出示例輸入輸出示例輸入輸出說明來源力扣鏈接限制二叉樹中的節點數量在之間。 ...

    leejan97 評論0 收藏0
  • 力扣(LeetCode)310

    摘要:圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的一個圖,寫出一個函數找到所有的最小高度樹并返回他們的根節點。因此使用一個數組代表每個節點的入度,若入度為就是葉子節點。 題目地址:https://leetcode-cn.com/probl...題目描述: 對于一個具有樹特征的無向圖,我們可選擇任何一個節點作為根。圖因此可以成為樹,在所有可能的樹中,具有最小...

    amuqiao 評論0 收藏0
  • LeetCode天梯>Day026 反轉鏈表(遞歸法+(迭代法)雙鏈表法) | 初級算法 | Py

    摘要:關于遞歸這里提一兩點遞歸基本有這幾步遞歸的模板,終止條件,遞歸調用,邏輯處理。 ?作者簡介:大家好,我是車神哥,府學路18號的車神? ?個人主頁:應無所住而生...

    imingyu 評論0 收藏0
  • 力扣(LeetCode)452

    摘要:對于每個氣球,提供的輸入是水平方向上,氣球直徑的開始和結束坐標。可以射出的弓箭的數量沒有限制。弓箭一旦被射出之后,可以無限地前進。我們想找到使得所有氣球全部被引爆,所需的弓箭的最小數量。解答這是一道區間覆蓋問題,不太好說清楚,利用模板即可。 題目地址:https://leetcode-cn.com/probl...題目描述:在二維空間中有許多球形的氣球。對于每個氣球,提供的輸入是水平方...

    fanux 評論0 收藏0

發表評論

0條評論

Noodles

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<