首先,关于二叉树的一些其它题目,可以参考:
《剑指offer》28-30、二叉树四则:之字形遍历、层次遍历、搜索二叉树的后序遍历、二叉树的路径
搜索二叉树的概念:左子结点值小于根节点值,根节点值小于右节点值,所以最后一个元素肯定是根节点。
offer49的要求是找搜索二叉树的第k大节点,我采取的是中序遍历的方法,如果对上面链接的题目都很熟的话,这里真的没啥好讲的,代码也简单。我把inorder定义在了递归里面,这样看上去可能不太好理解,其实就是方便写递归。
# offer49-solution
class Solution:
# 返回对应节点TreeNode
def KthNode(self, pRoot, k):
if not pRoot or k <= 0:
return None
res = []
def inorder(pRoot): # 中序遍历
if not pRoot:
return []
inorder(pRoot.left)
res.append(pRoot)
inorder(pRoot.right)
inorder(pRoot)
if len(res) < k:
return None
return res[k - 1]