二叉排序树的创建很简单,即选定根节点后,将所有小于根节点的放到他的左边,大于的放到右边,再迭代处理一手
class BTNode:
def __init__(self, data, left, right):
self.data = data
self.left = left
self.right = right
class BTree:
def __init__(self, root):
self.root = root
def insert(self, data):
self.insertNode(data, self.root)
def insertNode(self, data, btNode):
if btNode is None: # Reach the edge node, create a new node
btNode = BTNode(data, None, None)
elif data < btNode.data: # search for the appropriate position
if btNode.left is None:
btNode.left = BTNode(data, None, None)
return
else:
self.insertNode(data, btNode.left)
elif data > btNode.data: # search for the appropriate position
if btNode.right is None:
btNode.right = BTNode(data, None, None)
return
else:
self.insertNode(data, btNode.right)
def printBTreeImpl(self, btNode):
if btNode is None:
return
self.printBTreeImpl(btNode.left)
print(btNode.data)
self.printBTreeImpl(btNode.right)
def printBTree(self):
self.printBTreeImpl(self.root)
if __name__ == '__main__':
import numpy as np
lis = [5, 8, 3, 1, 4, 9, 7]
root = BTNode(np.median(lis), None, None)
if np.median(lis) in lis:
lis.pop(int(np.median(lis)))
bTree = BTree(root) # Use the median as the root node to balance the binary tree
for i in lis:
bTree.insert(i)
bTree.printBTree()
- 二叉排序树的建立过程是nlogn
- 二叉排序树的查找是logn
- 二叉排序树中根遍历得到有序的结果
参考链接