题解 | #Tree# #二叉搜索树的第k个节点#
二叉搜索树的第k个节点
https://www.nowcoder.com/practice/57aa0bab91884a10b5136ca2c087f8ff
#coding:utf-8
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param proot TreeNode类
# @param k int整型
# @return int整型
#
class Solution:
def __init__(self):
#记录返回的节点
self.res = None
#记录遍历了多少个
self.count = 0
self.path = []
def KthNode(self , proot , k ):
# write code here
#step 1:设置全局变量count记录遍历了多少个节点,res记录第k个节点。
#step 2:另写一函数进行递归中序遍历,当节点为空或者超过k时,结束递归,返回。
#step 3:优先访问左子树,再访问根节点,访问时统计数字,等于k则找到。
#step 4:最后访问右子树。
self.inOrder(proot, k)
print ("Path: ", self.path)
if self.res != None:
return self.res.val
else:
return -1
def inOrder(self, root, k):
if root == None:
return
if self.count > k:
return
self.inOrder(root.left, k)
self.count +=1
#只记录第k个
self.path.append(root.val)
if self.count == k:
self.res = root
self.inOrder(root.right, k)
