题二 : 二叉树建立与遍历

#encoding:utf-8

class BinatyObj(object):
    self_value = None
    left = None
    right = None
    def __init__(self,self_value,left=None,right=None):
        self.self_value = self_value
        self.left = left
        self.right = right

def archive(num,obj):
    if num > obj.self_value:
        if obj.right:
            archive(num,obj.right)
        else:
            obj.right = BinatyObj(num,None,None)
    else:
        if obj.left:
            archive(num,obj.left)
        else:
            obj.left = BinatyObj(num,None,None)
  

def preorder_traversal(obj,num_list):
    num_list.append(obj.self_value)
    if obj.left:
        preorder_traversal(obj.left,num_list)
    if obj.right:
        preorder_traversal(obj.right,num_list)


def inorder_traversal(obj_list,num_list):
    temp_obj_list = []
    for obj in obj_list:
        num_list.append(obj.self_value)
        obj.left and temp_obj_list.append(obj.left)
        obj.right and temp_obj_list.append(obj.right)
    if temp_obj_list:
        inorder_traversal(temp_obj_list,num_list)

def binaty(s):
    src_num_list = map(lambda x:int(x),s.split(";"))
    if not src_num_list:
        return ""
      
    #封装
    exist_set = set()
    first_obj = BinatyObj(src_num_list.pop(0),None,None)
    exist_set.add(first_obj.self_value)
    for num in src_num_list:
        if num in exist_set:
            continue
        archive(num,first_obj)
        exist_set.add(num)
      
    #解封装,先序遍历
    tar1_num_list = []
    preorder_traversal(first_obj,tar1_num_list)
    print "preorder_traversal :",";".join(map(lambda x:str(x),tar1_num_list))
   
    #解封装,中序遍历
    tar2_num_list = []
    inorder_traversal([first_obj],tar2_num_list)
    print "inorder_traversal :",";".join(map(lambda x:str(x),tar2_num_list))

if __name__ == "__main__":
    binaty("7;9;8;5;8;6;3;1;7;10")

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值