91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python二叉樹怎樣尋找重復的子樹

發布時間:2021-12-13 16:18:38 來源:億速云 閱讀:210 作者:柒染 欄目:大數據

這篇文章給大家介紹python二叉樹怎樣尋找重復的子樹,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

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

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

示例 1:

1
      / \
     2   3
    /   / \
   4   2   4
      /
     4

下面是兩個重復的子樹:

2
    /
   4

4

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

解題思路:

1,重復子樹意思是從根節點到葉子節點一樣

2,重復多次只取一個,所以用hash存次數,取次數為2的作為解雇

3,雖然前序+中序遍歷可以恢復二叉樹,但是對于元素值相同的不同二叉樹,前序,中序遍歷結果是一樣的,沒法區分。

   0     和   0

/               \

0                   0

4,因此采用leetcode序列化方式,用特殊字符表示孩子是null,然后先序遍歷,可以唯一表示一棵子樹。

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func findDuplicateSubtrees(root *TreeNode) []*TreeNode {    a:=make(map[string]int)    a1,tn:=serllize(root,a)    fmt.Println(a1)    return tn}
func serllize(root *TreeNode,s map[string]int)(map[string]int,[]*TreeNode ){    var tn []*TreeNode    if root==nil{        return s,tn    }    s1:=ts(root)    s[s1]++    if s[s1]==2{        tn=append(tn,root)    }    sl,l:=serllize(root.Left,s)    sr,r:=serllize(root.Right,sl)    tn=append(tn,l...)    tn=append(tn,r...)    return sr,tn}
func ts(root *TreeNode)(string){    s:="*"    if root!=nil{        s+=fmt.Sprintf("%d",root.Val)+","        l:=ts(root.Left)        s+=l        r:=ts(root.Right)        s+=r    }    return s}

關于python二叉樹怎樣尋找重復的子樹就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通化县| 浦县| 英吉沙县| 唐山市| 姚安县| 博野县| 鹿邑县| 舒兰市| 平果县| 五寨县| 万州区| 阳泉市| 咸丰县| 上林县| 贺兰县| 图木舒克市| 济宁市| 五大连池市| 咸丰县| 温宿县| 楚雄市| 洛扎县| 泾阳县| 巴楚县| 都江堰市| 璧山县| 汝城县| 民县| 静安区| 区。| 治县。| 汉沽区| 广元市| 德州市| 英吉沙县| 濮阳县| 苗栗市| 永康市| 信宜市| 禹城市| 定襄县|