#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")