二分查找 算法

二叉树:

    根节点

  左叶子节点

  右叶子节点

  子树

二叉树的遍历:

  广度遍历(层级)    插入到第一次出现的空节点上面  

  深度遍历:

    前序(根左右)

    中序(左根右)

    后序(左右根)

# 广度遍历  
class Node():
    def __init__(self,item):
        self.item = item
        self.left = None
        self.right = None
class Tree():
    def __init__(self):
        self.root = None
    def add(self,item): 
        node = Node(item)
        
        if self.root is None:
            self.root = node
            return       
        queue = [self.root]  #列表  根节点 [1] 
        while queue: 
            cur = queue.pop(0)  #根节点    pop 1了
            if cur.left is None:  #子树左叶子空之后的赋值
                cur.left = node
                return
            else:
                queue.append(cur.left)  #不为空 就追加   [2]
            if cur.right is None:  #子树右叶子空之后的赋值
                cur.right = node
                return
            else:
                queue.append(cur.right)   #[2,3]
    def travel(self):   #遍历
        if self.root is None:
            return
        queue = [self.root]
        
        while queue:
            cur = queue.pop(0)
            print(cur.item)
            if cur.left is not None:
                queue.append(cur.left)
            if cur.right is not None:
                queue.append(cur.right)

tree = Tree()
for i in range(10):
tree.add(i)
tree.travel()

 
实现排序二叉树
class Node():
    def __init__(self,item):
        self.item = item
        self.left = None
        self.right = None
class Tree():
    def __init__(self):
        self.root = None
        
    def insertByOder(self,item):
        
        node = Node(item)
        if self.root is None:
            self.root = node
            return
        
        cur = self.root
        while True:
            if item < cur.item:
                if cur.left is None:
                    cur.left = node
                    return
                else:
                    cur = cur.left
            else:
                if cur.right is None:
                    cur.right = node
                    return
                else:
                    cur = cur.right
            
    def forward(self,root):
        if root is None:
            return
        # 根 左 右
        print(root.item,end=' ')
        self.forward(root.left)
        self.forward(root.right)
    def mid(self,root):
        if root is None:
            return
        #左根右
        self.mid(root.left)
        print(root.item,end=' ')
        self.mid(root.right)
    def back(self,root):
        if root is None:
            return
        #左右根
        self.back(root.left)
        self.back(root.right)
        print(root.item,end=' ')
        

t = Tree()
alist = [10,7,12,55,33,20,4]
for i in alist:
    t.insertByOder(i)
    
t.forward(t.root)
print('\n')
t.mid(t.root)
print('\n')
t.back(t.root)
print('\n')
        

    

猜你喜欢

转载自www.cnblogs.com/zhangchen-sx/p/10897346.html