题目:
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
来源:《剑指offer》
思路:二叉树中序遍历
1.递归
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Index:
index = 0
node = None
class Solution:
# 返回对应节点TreeNode
def inorder(self, pRoot, k):
if not pRoot: return
self.inorder(pRoot.left, k)
Index.index += 1
if Index.index == k:
Index.node = pRoot
return
self.inorder(pRoot.right, k)
def KthNode(self, pRoot, k):
Index.index=0
Index.node=None
self.inorder(pRoot, k)
return Index.node
2.非递归方法
# -*- 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):
stack = []
index = 0
p = pRoot
while p or stack:
while p:
stack.append(p)
p = p.left
p = stack.pop()
index += 1
if index == k:
return p
p = p.right
return None