剣指offer 54二叉探索木のk番目の大きなノード(python実装)


テーマ:二叉探索木を1本与えて、k番目の大きいノードを与えてください.
たとえば、ノードの数値サイズ順にツリーが並べられています.
k = 5 #    k      k=3
count = 0

class BinaryTreeNode(object):
    def __init__(self, value=None, left=None, right=None):
        self = self
        self.value = value
        self.left = left  #    
        self.right = right  #    


class Tree(object):
    def __init__(self, value):
        self.root = BinaryTreeNode(value, None, None);


def midTraverse(root):
     if root == None:
        return
     midTraverse(root.left)
     print(root.value)
     global count
     count = count +  1
     if count == k:
         print(' %d   %d' % (k,root.value))
     midTraverse(root.right)

if __name__ == '__main__':

     tree = Tree(5)
     node2 = BinaryTreeNode(2)
     node4 = BinaryTreeNode(4)
     node3 = BinaryTreeNode(3, node2, node4)

     node6 = BinaryTreeNode(6)
     node8 = BinaryTreeNode(8)
     node7 = BinaryTreeNode(7, node6, node8)

     tree.root.left = node3
     tree.root.right = node7
     midTraverse(tree.root)

 
印刷:
2 3 4 5 6 5番目に大きい数6 7