1. 程式人生 > >劍指offer--面試題63:二叉搜尋樹的第k個結點

劍指offer--面試題63:二叉搜尋樹的第k個結點

題目描述

給定一顆二叉搜尋樹,請找出其中的第k小的結點。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按結點數值大小順序第三個結點的值為4。

python實現:

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回對應節點TreeNode
    #法2:如果需要KthNode()的呼叫很頻繁,則參考:https://leetcode.com/problems/kth-smallest-element-in-a-bst/
    result = None
    cnt = 0
    def KthNode(self, pRoot, k):
        # write code here
        if k<=0 or pRoot is None:
            return None
        self.cnt = k
        self.inOrder(pRoot)
        return self.result
         
         
    def inOrder(self, root):
        if self.result is not None:
            return
        if root:
            self.inOrder(root.left)
            self.cnt -= 1
            #print root.val, self.cnt
            if self.cnt==0:
                #self.result = root.val
                self.result = root
                return
            self.inOrder(root.right)