根据后续数组重建搜索二叉树
生活随笔
收集整理的這篇文章主要介紹了
根据后续数组重建搜索二叉树
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目:
給定一個(gè)整型數(shù)組arr,已知其中沒(méi)有重復(fù)值,判斷arr是否可能是節(jié)點(diǎn)值類(lèi)型為整型的搜索二叉樹(shù)后續(xù)遍歷的結(jié)果
思路:根據(jù)搜索二叉樹(shù)的性質(zhì),比后續(xù)數(shù)組最后一個(gè)元素值小的數(shù)組會(huì)在數(shù)組的左邊,比數(shù)組最后一個(gè)元素值大的數(shù)組會(huì)在數(shù)組的右邊。
def isPostArray(arr):if arr == None or len(arr)==0:return Falsereturn isPost(arr,0,len(arr)-1)def isPost(arr,start,end):if start == end:return Trueless = -1more = endfor i in range(start,end):if arr[i] < arr[end]:less = ielse:if end == more:more = i + 1if less == -1 or more == end:return isPost(arr,start,end-1)if less!=more-1:return Falsereturn isPost(arr,start,less) and isPost(arr,less+1,end-1)可參考例子: arr = [2,1,3,6,5,7,4] 4 <4 = [2,1,3] >4 = [6,5,7]進(jìn)階問(wèn)題:如果整型數(shù)組arr中沒(méi)有重復(fù)值,且已知是一顆搜索二叉樹(shù)的后續(xù)遍歷結(jié)果,通過(guò)數(shù)組arr重構(gòu)二叉樹(shù)。
class Node:def __init__(self,value):self.value = valueself.left = Noneself.right = Nonedef ArrayToBST(array):if array == None or len(array)==0:return Nonereturn ToBST(arr,0,len(array)-1)def ToBST(arr,start,end):if start > end:return Nonenode = Node(arr[end])less = -1more = endfor i in range(start,end):if arr[end] > arr[i]:less = ielse:if more == end:more = inode.left = ToBST(arr,start,less)node.right = ToBST(arr,more,end-1)return node?
總結(jié)
以上是生活随笔為你收集整理的根据后续数组重建搜索二叉树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 打印二叉树的边界节点
- 下一篇: 通过有序数组生成平衡搜索二叉树