日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

找到二叉树中的最大搜索子树

發(fā)布時間:2025/4/5 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 找到二叉树中的最大搜索子树 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目:?
  給定一棵二叉樹的頭節(jié)點(diǎn)head,已知其中所有節(jié)點(diǎn)的值都不一樣,找到含有節(jié)點(diǎn)最多的搜索二叉樹,并返回這棵子樹的頭節(jié)點(diǎn)。(注意子樹的概念)

基本思路:?
以節(jié)點(diǎn)node為頭的樹中,最大的搜索二叉樹只可能來自以下的兩種情況:  

node的左子樹和右子樹都是搜索二叉樹,并且左子樹的最大值小于node,右子樹的最小值大于node,此時,以node為頭的整棵樹都是搜索二叉樹。
如果不滿足情況1,那么最大的搜索二叉樹來自node左子樹的最大搜索二叉子樹或者node右子樹的最大搜索二叉子樹

整體過程是二叉樹的后序遍歷,

過程如下:

遍歷到當(dāng)前節(jié)點(diǎn)cur時,先遍歷左子樹收集四個信息,分別是左子樹上最大搜索二叉樹的頭節(jié)點(diǎn)(lBST),節(jié)點(diǎn)數(shù)(lSize),最大值(lMax)和最小值(lMin)。再遍歷右子樹,也收集四個信息rBST, rSize, rMax, rMin。
根據(jù)步驟一收集的信息,判斷是否滿足情況1,如果滿足,返回cur。如果不滿足,返回lBST, rBST中最大的一個。

def getMaxLength(root):if root == None:return record = [root] + [0 for i in range(3)]return process(record)def process(record):import sysif record[0] == None:return [None,0,sys.maxsize,-sys.maxsize]leftData = process(record[0].left)leftSize,leftMax,leftMin = record[1],record[2],record[3]rightData = process(record[1].right)rightSize,rightMax,rightMin = record[1],record[2],record[3]record[1] = max(leftSize,rightSize)record[2] = min(min(leftMax,rightMax),int(root.val))record[3] = max(max(leftMin,rightMin),int(root.val))if rightSize > leftSize:root = rightDataelse:root = leftDataif record[0].left == leftData and record[0].right == rightData and leftMax <= int(record[0].val) and rightMin >= int(record[0].val):record[1] = leftSize + rightSize + 1root = record[0]return [root,record[1],record[2],record[3]]

?

總結(jié)

以上是生活随笔為你收集整理的找到二叉树中的最大搜索子树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。