1. 程式人生 > >leetcode 230 二叉搜尋樹中第K小的元素 (python)

leetcode 230 二叉搜尋樹中第K小的元素 (python)

問題本質:對二叉樹進行中序遍歷,遍歷一個節點就進行計數,計數達到k的時候就結束。

方法一(遞迴):

class Solution(object):
    def kthSmallest(self, root, k):
        self.count=k
        self.res=0
        def core(root):
            if  root :
                core(root.left)
                self.count=self.count-1
                if self.count==0
: self.res=root.val core(root.right) core(root) return self.res

參考:二叉樹的中序遍歷遞迴法

class Solution(object):
    def inorderTraversal(self, root):
        def core(root,res):
            if root:
                core(root.left,res)
                res.append(root.val)
                core(root.right,res)

        res=[]
        core(root,res)
        return
res

方法二(迴圈)

class Solution(object):
    def kthSmallest(self, root, k):
        stack=[]
        while True:
            if root:
                stack.append(root)
                root=root.left
            else:
                root=stack.pop()
                k=k-1
                if k==0:
                    return
root.val else: root=root.right

對比參考:中序的迴圈寫法(結束條件不一樣)

class Solution(object):
    def inorderTraversal(self, root):
        stack=[]
        res=[]
        node=root
        while node or len(stack)>0:
            if node:
                stack.append(node)
                node=node.left
            else:
                node=stack.pop()
                res.append(node.val)
                node=node.right
        return res