剣指offer 54二叉探索木のk番目の大きなノード(python実装)
1093 ワード
テーマ:二叉探索木を1本与えて、k番目の大きいノードを与えてください.
たとえば、ノードの数値サイズ順にツリーが並べられています.
印刷:
2 3 4 5 6 5番目に大きい数6 7
たとえば、ノードの数値サイズ順にツリーが並べられています.
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