1.二叉树构造
class Node:
def __init__(self,val):
self.childleft = None
self.childright = None
self.nodedata = val
root = Node(1)
root.childleft = Node(2)
root.childright = Node(3)
root.childleft.childleft = Node(4)
root.childleft.childright = Node(5)
1.1中序遍历
首先访问左节点,然后访问根节点,然后访问右节点。
def InOrd(root):
if root:
InOrd(root.childleft)
print (root.nodedata)
InOrd(root.childright)
InOrd(root) ##4 2 5 1 3
从左子树中的所有节点开始遍历,然后向根移动,最后向右子树移动。
1.2.前序遍历
首先访问根节点,然后是左子树,然后是右子树
def PreOrd(root):
if root:
print (root.nodedata)
PreOrd(root.childleft)
PreOrd(root.childright)
PreOrd(root) ##1 2 4 5 3
1.3.后序遍历
后序遍历从左边开始,然后到右边,最后是根。
def PostOrd(root):
if root:
PostOrd(root.childleft)
PostOrd(root.childright)
print (root.nodedata)
PostOrd(root) ## 4 5 2 3 1
2.冒泡排序
冒泡排序是一种比较算法,先比较相邻的元素,如果它们没有按照指定的顺序怎交换下位置。
def bs(a):
b=len(a)-1
for x in range(b):
for y in range(b-x):
if a[y]>a[y+1]:
a[y],a[y+1]=a[y+1],a[y]
return a
a=[3,6,1,8]
bs(a)
3.线性搜索
线性搜索算法用于通过将给定元素与给定数组的每个元素进行比较来连续搜索给定元素。
def lin_search(myarray, n, key):
for x in range(0, n):
if (myarray[x] == key):
return x
return -1
myarray = [ 12, 1, 34, 17]
key = 17
n = len(myarray)
matched = lin_search(myarray, n, key)
if(matched == -1):
print("未发现")
else:
print("目标数索引为:", matched)