1. 程式人生 > >[python版]劍指offer -- 二叉搜尋樹的第k大結點

[python版]劍指offer -- 二叉搜尋樹的第k大結點

思路

二叉搜尋樹按照中序遍歷的順序打印出來正好就是排序好的順序。 所以,按照中序遍歷的第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, root, k):
        # write code here
        if not root:return None
        self.res = []
        self.DFS(root)
        return self.res[k-1] if 0<k<=len(self.res) else None
    # 深度優先+中序遍歷得到整棵樹
    def DFS(self, root):
        if not root: return
        self.DFS(root.left)
        self.res.append(root)
        self.DFS(root.right)