鱼C论坛

 找回密码
 立即注册
查看: 2121|回复: 2

[已解决]关于二叉搜索树

[复制链接]
发表于 2017-8-7 16:57:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位前辈好,我又来提问了,问题是将一个数组转为二叉搜索树,关于数据结构的概念我不是很熟,所以将我自认为的答案发上来,帮我看看我关于这个问题的理解以及我的答案是否正确
  1. #coding=utf-8
  2. def compare(num1,num2,dict_g):
  3.     '''
  4.     用于比较num1和num2的大小,如果num2大于num1,且num1的右子节点不存在(不为None)则将num2设定为num1的右子节点;如果num2大于
  5.     num1,但是num1的左子节点存在,就以num1的左子节点作为新num1进行比较;如果num2小于num1与上边同理

  6.     :param num1: 要比较的根节点
  7.     :param num2: 要比较的子元素
  8.     :param dict_g: 模拟二叉树的字典
  9.     :return:
  10.     '''
  11.     temp_r=dict_g.setdefault(num1,[None,None])[1]#右分支
  12.     temp_l=dict_g.setdefault(num1,[None,None])[0]#左分支
  13.     if num2>num1 and temp_r == None:
  14.         dict_g[num1][1]=num2
  15.     elif num2<num1 and temp_l==None:
  16.         dict_g[num1][0]=num2
  17.     elif num2>num1 and temp_r !=None:
  18.         compare(temp_r,num2,dict_g)
  19.     else:
  20.         compare(temp_l,num2,dict_g)
  21.     return dict_g
  22. def make_tree():
  23.     '''
  24.     用字典模拟二叉树,用数组里的元素作为字典的键(节点),每个键映射一个有两个元素的列表,两个元素分别表示左节点和右节点,
  25.     通过遍历数组元素和调用compare函数完成二叉树的模拟

  26.     array:要转为二叉树的数组
  27.     dict_result:模拟二叉树的字典
  28.     :return:
  29.     '''
  30.     array=[3,5,67,8,2,23]
  31.     dict_result={array[0]:[None,None]}
  32.     for i in array[1:]:
  33.         dict_result=compare(array[0],i,dict_result)
  34.         #print dict_result
  35.     for key in dict_result:#将结果输出
  36.         print '%d-->%s'%(key,dict_result[key])
  37. make_tree()

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-7 23:35:18 | 显示全部楼层    本楼为最佳答案   
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-8 12:00:32 | 显示全部楼层
本帖最后由 18813034116 于 2017-8-8 12:10 编辑


我知道了,谢谢你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-1 08:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表