|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
各位前辈好,我又来提问了,问题是将一个数组转为二叉搜索树,关于数据结构的概念我不是很熟,所以将我自认为的答案发上来,帮我看看我关于这个问题的理解以及我的答案是否正确
- #coding=utf-8
- def compare(num1,num2,dict_g):
- '''
- 用于比较num1和num2的大小,如果num2大于num1,且num1的右子节点不存在(不为None)则将num2设定为num1的右子节点;如果num2大于
- num1,但是num1的左子节点存在,就以num1的左子节点作为新num1进行比较;如果num2小于num1与上边同理
- :param num1: 要比较的根节点
- :param num2: 要比较的子元素
- :param dict_g: 模拟二叉树的字典
- :return:
- '''
- temp_r=dict_g.setdefault(num1,[None,None])[1]#右分支
- temp_l=dict_g.setdefault(num1,[None,None])[0]#左分支
- if num2>num1 and temp_r == None:
- dict_g[num1][1]=num2
- elif num2<num1 and temp_l==None:
- dict_g[num1][0]=num2
- elif num2>num1 and temp_r !=None:
- compare(temp_r,num2,dict_g)
- else:
- compare(temp_l,num2,dict_g)
- return dict_g
- def make_tree():
- '''
- 用字典模拟二叉树,用数组里的元素作为字典的键(节点),每个键映射一个有两个元素的列表,两个元素分别表示左节点和右节点,
- 通过遍历数组元素和调用compare函数完成二叉树的模拟
- array:要转为二叉树的数组
- dict_result:模拟二叉树的字典
- :return:
- '''
- array=[3,5,67,8,2,23]
- dict_result={array[0]:[None,None]}
- for i in array[1:]:
- dict_result=compare(array[0],i,dict_result)
- #print dict_result
- for key in dict_result:#将结果输出
- print '%d-->%s'%(key,dict_result[key])
- make_tree()
复制代码
|
|