剣指Offer:二叉探索木のK番目の接点


タイトル説明:二叉検索ツリーを指定し、その中のk番目の大きなノードを見つけてください.たとえば、5/3 7////24 6 8の3番目のノードの値は、ノードの数値の大きさ順に4になります.
二叉探索ツリーの中順遍歴はソートされているため,まず中順に二叉ツリー全体を遍歴し,それをリストに保存し,リストのK番目の値を返すことができることを知っている.
# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    #       TreeNode
    def KthNode(self, pRoot, k):
        # write code here
        list = self.tolist(pRoot)
        if k <= 0 or k > len(list):
            return None
        return list[k-1]
        
    def tolist(self, root):
        if root == None:
            return []
        left = self.tolist(root.left)
        right = self.tolist(root.right)
        return left + [root] + right