二叉搜索樹的第k個(gè)節(jié)點(diǎn)

題目描述

給定一棵二叉搜索樹,請(qǐng)找出其中的第k小的結(jié)點(diǎn)。例如, (5,3,7,2,4,6,8) 中,按結(jié)點(diǎn)數(shù)值大小順序第三小結(jié)點(diǎn)的值為4。

思路

這里先指明題目中蘊(yùn)含的一個(gè)特點(diǎn),二叉搜索書的中序遍歷的順序就是從小到大的排序順序。
一個(gè)很簡(jiǎn)單的思路就是先把樹中序遍歷,然后取第k個(gè)值。
邊界情況要分別注意k過?。?)和過大(超過樹的大小)。
針對(duì)樹很大的情況,可以在每次向遍歷結(jié)果中加入節(jié)點(diǎn)時(shí)判斷一下是否是第k個(gè)??梢蕴崆敖K止遍歷。

代碼

class Solution:
    # 返回對(duì)應(yīng)節(jié)點(diǎn)TreeNode
    def KthNode(self, pRoot, k):
        if k == 0:
            return None
        stack = []
        root = pRoot
        result = []
        while stack or root:
            while root:
                stack.append(root)
                root = root.left
            node = stack.pop()
            result.append(node)
            if len(result) == k: #如果樹很大,可以提前終止遍歷
                return node
            root =node.right
        if k>len(result):
            return None
        return result[k-1]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容