数据结构与算法(1)--二叉树

博客记录的第一个算法:

实现二叉树数据结构,以及深度优先搜索和广度优先搜索算法(非科班小白,努力中。。。。) 

class BT_Node:                                                  
    def __init__(self, data, left = None, right = None):        
        self.data = data                                        
        self.left = left                                        
        self.right = right                                      
                                                                
class BTree:                                                    
    def __init__(self):                                         
       self.root = None      # None创建空树,不是BT_Node树节点            
                                                                
    def set_root(self, node):                                   
        self.root = node                                        
                                                                
    def is_empty(self):                                         
        return self.root == None                                
                                                                
    def addLeft(self, node):                                    
        if self.is_empty():                                     
            self.root = node                                    
        else:                                                   
            self.root.left = node                               
                                                                
    def addRight(self, node):                                   
        if self.is_empty():                                     
            self.root = node                                    
        else:                                                   
            self.root.right = node                              
                                                                
#  深度优先搜索(先根序)                                                  
def dfs_front(node):                                            
    if node == None:                                            
        return                                                  
    print(str(node.data)+"→", end="")                           
    dfs_front(node.left)                                        
    dfs_front(node.right)                                       
                                                                
#  深度优先搜索(中根序)                                                  
def dfs_middle(node):                                           
    if node == None:                                            
        return                                                  
    dfs_middle(node.left)                                       
    print(str(node.data) + "→", end="")                         
    dfs_middle(node.right)                                      
                                                                
#  深度优先搜索(后根序)                                                  
def dfs_after(node):                                            
    if node == None:                                            
        return                                                  
    dfs_after(node.left)                                        
    dfs_after(node.right)                                       
    print(str(node.data) + "→", end="")                         
                                                                
#  宽度优先搜索                                                       
def bfs(node):                                                  
    if not node:                                                
        print("this is an empty tree")                          
    st = []      #List做为队列缓存,先进先出                               
    st.append(node)                                             
    while st:                                                   
        temp = st[0]                                            
        print(str(temp.data)+"→", end="")                       
        del st[0]                                               
        if temp.right:                                          
            st.append(temp.left)                                
        if temp.left:                                           
            st.append(temp.right)                               
                                                                
# 以下为测试部分                                                       
t = BTree()                                                     
t.set_root(BT_Node(4))                                          
t.addLeft(BT_Node(5,BT_Node(6),BT_Node(7)))                     
t.addRight(BT_Node(8,BT_Node(9),BT_Node(10)))                   
print("先根序:")                                                   
dfs_front(t.root)                                               
print("\n中根序:")                                                 
dfs_middle(t.root)                                              
print("\n后根序:")                                                 
dfs_after(t.root)                                               
print("\n宽度优先搜索:")                                              
bfs(t.root)                                                     
                                                                

  输出结果如下:

"E:\Program Files\python 3.7\python.exe" C:/Users/Administrator/Desktop/python学习/数据结构与算法/BTree.py
先根序:
4→5→6→7→8→9→10→
中根序:
6→5→7→4→9→8→10→
后根序:
6→7→5→9→10→8→4→
宽度优先搜索:
4→5→8→6→7→9→10→
Process finished with exit code 0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值