剑指offer第二版(Python3)--面试题54 : 二叉搜索树的第k个结点

第2章 面试需要的基础知识

第3章 高质量的代码

第4章 解决面试题的思路

第5章 优化时间和空间效率

  面试题39 : 数组中出现次数超过一半的数字

  面试题40 : 最小的k个数

  面试题42 : 连续子数组的最大和

  面试题43 : 从1到n整数中1出现的次数

  面试题45 : 把数组排成最小的数

  面试题49 : 丑数

  面试题50 : 第一个只出现一次的字符

  面试题51 : 数组中的逆序对

  面试题52 : 两个链表的第一个公共结点

  面试题53 : 在排序数组中查找数字

  面试题54 : 二叉搜索树的第k个结点

  面试题55 : 二叉树的深度、平衡二叉树

第6章 面试中的各项能力

第7章 两个面试案例


题目描述
牛客网
  给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。

解题思路
  根据二叉搜索树的特点,中序遍历就是对树中节点从小到大排序。所以中序遍历即可。第k小就是从小遍历k个。
  有点迷的就是这个题返回的是节点,而不是节点值

实战
  由于python2中还不支持nonlocal,所以这里用一个列表记录遍历的节点数。

# 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
        if not pRoot or k < 0:
            return None
        
        def search(root):
            if not root:
                return 
            # 遍历左节点
            value = search(root.left)  
            
            # 检查当前节点
            if value:
                return value
            n[0] += 1
            if n[0] == k:
                return root
            
            # 遍历右节点
            value = search(root.right)
            if value:
                return value
        
        n = [1]
        return search(pRoot)

python3版本

# 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
        if not pRoot or k < 0:
            return None
        
        def search(root):
        	nonlocal n
        	
            if not root:
                return 
            value = search(root.left)
            if value:
                return value
            if n == k:
                return root
            n += 1
            value = search(root.right)
            if value:
                return value
        
        n = 1
        return search(pRoot)

你可能感兴趣的:(算法设计)