我想找到二叉搜索树的第k个最小元素,并且使用递归时遇到了问题。我知道如何打印树/订单等,但我无法返回元素的排名。有人能指出我犯了什么错误吗?一般来说,我很难理解树中的递归。为了BST遍历:找到
编辑:这是一个练习,所以我不想使用内置函数。我有另一个解决方案,在我插入节点并且代码工作正常的情况下跟踪左侧和右侧儿童的数量。我想知道是否有可能使用inorder遍历来做到这一点,因为它似乎是一个更简单的解决方案。
class BinaryTreeNode:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def traverseInOrder(root,order):
if root == None:
return
traverseInOrder(root.left,order+1)
print root.data,
print order
traverseInOrder(root.right,order)
"""
a
/ \
b c
/\ /\
d e f g
/\
h i
"""
h = BinaryTreeNode("h")
i = BinaryTreeNode("i")
d = BinaryTreeNode("d", h, i)
e = BinaryTreeNode("e")
f = BinaryTreeNode("f")
g = BinaryTreeNode("g")
b = BinaryTreeNode("b", d, e)
c = BinaryTreeNode("c", f, g)
a = BinaryTreeNode("a", b, c)
print traverseInOrder(a,0)
嗨,是的,我已经做了另一个练习。我只是想知道是否可以使用inorder遍历来完成它。我实现的另一个解决方案是在插入节点时跟踪左侧和右侧儿童的数量。 – Anastasia
我想知道是否有可能使用中序遍历的简单计数器,并在计数器击中数字k时退出。例如,h会返回1,d会返回2,我会返回3等。所以如果我想要第三小,我会停止当我打印我 – Anastasia