完全原创,能力有限,欢迎参考,未经允许,请勿转载 !

完全原创,能力有限,欢迎参考,未经允许,请勿转载 !

完全原创,能力有限,欢迎参考,未经允许,请勿转载 !

完全原创,能力有限,欢迎参考,未经允许,请勿转载 !

多叉树的最短路径:

思想:    传入start 和 end 两个 目标值    1 找到从根节点到目标节点的路径    2 从所在路径,寻找最近的公共祖先节点,    3 对最近公共祖先根节点 拼接路径
 1 import copy
 2
 3 #节点数据结构
 4 class Node(object):
 5     # 初始化一个节点
 6     def __init__(self,value = None):
 7         self.value = value  # 节点值
 8         self.child_list = []    # 子节点列表
 9     # 添加一个孩子节点
10     def add_child(self,node):
11         self.child_list.append(node)
12
13
14 # 初始化一颗测试二叉树
15 def init():
16     '''
17     初始化一颗测试二叉树:
18             A
19         B   C   D
20       EFG       HIJ
21     '''
22     root = Node('A')
23     B = Node('B')
24     root.add_child(B)
25     root.add_child(Node('C'))
26     D = Node('D')
27     root.add_child(D)
28     B.add_child(Node('E'))
29     B.add_child(Node('F'))
30     B.add_child(Node('G'))
31     D.add_child(Node('H'))
32     D.add_child(Node('I'))
33     D.add_child(Node('J'))
34     return root
35
36
37 # 深度优先查找 返回从根节点到目标节点的路径
38 def deep_first_search(cur,val,path=[]):
39     path.append(cur.value)  # 当前节点值添加路径列表
40     if cur.value == val:    # 如果找到目标 返回路径列表
41         return path
42
43     if cur.child_list == []:    # 如果没有孩子列表 就 返回 no 回溯标记
44         return 'no'
45
46     for node in cur.child_list: # 对孩子列表里的每个孩子 进行递归
47         t_path = copy.deepcopy(path)    # 深拷贝当前路径列表
48         res = deep_first_search(node,val,t_path)
49         if res == 'no': # 如果返回no,说明找到头 没找到  利用临时路径继续找下一个孩子节点
50             continue
51         else :
52             return res  # 如果返回的不是no 说明 找到了路径
53
54     return 'no' # 如果所有孩子都没找到 则 回溯
55
56 # 获取最短路径 传入两个节点值,返回结果
57 def get_shortest_path( start,end ):
58     # 分别获取 从根节点 到start 和end 的路径列表,如果没有目标节点 就返回no
59     path1 = deep_first_search(root, start, [])
60     path2 = deep_first_search(root, end, [])
61     if path1 == 'no' or path2 == 'no':
62         return '无穷大','无节点'
63     # 对两个路径 从尾巴开始向头 找到最近的公共根节点,合并根节点
64     len1,len2 = len(path1),len(path2)
65     for i in range(len1-1,-1,-1):
66         if path1[i] in path2:
67             index = path2.index(path1[i])
68             path2 = path2[index:]
69             path1 = path1[-1:i:-1]
70             break
71     res = path1+path2
72     length = len(res)
73     path = '->'.join(res)
74     return '%s:%s'%(length,path)
75
76
77
78
79
80 # 主函数、程序入口
81 if __name__ == '__main__':
82     root = init()
83     res = get_shortest_path('F','I')
84     print(res)


转载于:https://www.cnblogs.com/Lin-Yi/p/7780777.html

python实现 多叉树 寻找最短路径相关推荐

  1. python最短路径例子_Python实现的多叉树寻找最短路径算法示例

    本文实例讲述了Python实现的多叉树寻找最短路径算法.分享给大家供大家参考,具体如下: 多叉树的最短路径: 思想: 传入start 和 end 两个 目标值 1 找到从根节点到目标节点的路径 2 从 ...

  2. Python访问街区所有节点最短路径问题,并结合matplotlib可视化

    Python访问街区所有节点最短路径问题,并结合matplotlib可视化 1. 效果图 2. 源码 2.1 5个点全排列(递归+非递归算法) 2.2 python遍历全路径计算距离+matplot可 ...

  3. python多叉树遍历_基于Python的多叉树遍历算法

    [ 综直厘翹 S 赛理 ) 信息记录材料 2019 年 5 月第 20 卷第 5 期 基于 Python 的多叉树遍历算法 钱雨波 , 王金祥 ( 指导老师 ) ( 延边大学 吉林 延边 1 3300 ...

  4. vtkDijkstraGraphGeodesicPath在曲面上寻找最短路径的应用

    本文由Markdown语法编辑器编辑完成. 1. 问题提出 在传统的医学软件中,标记测量一般包括距离(distance), 角度(angle), 椭圆或矩形ROI的面积.灰度均值和标准差等.这些测量一 ...

  5. 数据结构课程设计——项目2:校园导游咨询(图 Dijkstra算法寻找最短路径)

    数据结构课程设计--项目2:校园导游咨询(图 Dijkstra算法寻找最短路径) 一.问题描述和项目要求 1.1 问题描述 1.2 基本要求 二.问题分析 2.1 程序功能设计分析 2.2 程序实现分 ...

  6. BFS广度优先遍历寻找最短路径(超详细实现过程)

    广度优先遍历寻找最短路径 最近一直想搞A*算法,发现有部分没理解清楚.于是找到了广度优先遍历寻路算法学习了下,想看看可不可以对写A*有什么帮助.广度优先遍历寻路算法本身并不难,概括来说就是像雷达一样, ...

  7. java迷宫寻找最短路径

    利用广度优先遍历算法的特点,由于迷宫每次只能走一格,所以对于任意一个节点,bfs第一次到达该点时一定是最短路径 直接上代码: package com.common.utils;import java. ...

  8. python求多叉树任意两点之间的距离

    对于多叉树求两点之间的距离,最难的地方在于有没有思路,如何找到指定点的位置,以及如何去计算两个指定点之间的距离,下图是一个简单的的多叉树,从5到1的距离为2,从5到7的距离为4. 我们可以将求解两点之 ...

  9. python实现三叉树_使用python代码实现三叉搜索树高效率”自动输入提示”功能

    最近项目中需要通过全拼音和简写拼音实现输入自动提示结果功能,查了一些资料发现三叉搜索树无论是在时间还是空间上都比较优秀. 三叉搜索树是trie树的演化版,除去了指针,这样在空间上节省不少,每个节点基本 ...

最新文章

  1. 第一届全国大学生智能汽车竞赛获奖名单
  2. initrd镜像文件的作用与制作
  3. Triangular Sums http://acm.nyist.net/JudgeOnline/problem.php?pid=122
  4. 方立勋_30天掌握JavaWeb_自己编写jdbc框架、dbutils框架(未完)
  5. Ubuntu kylin 14.04 LTS上安装opencv
  6. Windows中的用户和组以及用户密码破解
  7. 【对话系统】对话系统核心技术概要
  8. 大数据展示 定位_大数据平台 定位
  9. 【智能推荐】阿里云智能推荐AIRec文档说明与SDK测试
  10. 现在都在考华为认证,含金量高不高呢?该如何备考?
  11. VMWare中ubuntu打开终端方法
  12. 新海诚画集[秒速5センチメートル:樱花抄·铁道]
  13. 学会思考(转一位辩友的书单)
  14. java(数据存储)面试要点3
  15. 学python看小甲鱼还是黑马_P1 跟着小甲鱼(2019年新版)学习Python的第一天
  16. 音乐雷达 shazam算法_Shazam之类的音乐识别应用程序如何工作?
  17. Android 两个int类型的数相除结果应该是有小数的,但是为什么结果为0?
  18. 几款好用的随机密码生成器
  19. 线刷宝是不是一家技术流氓公司
  20. Vue中使用Echarts构建3D地球层+模拟时钟

热门文章

  1. arguments小结
  2. WAS6集群部署及初步测试
  3. how to deal with Demodex
  4. deepl真的有取代一般翻译的能力,这吞吐量和稳定性...亲测有效
  5. 英语听力里面的religion words
  6. etherpad an interactive approach for combining multiple sentences from different students in class
  7. 最新的Java SE平台和JDK版本发布计划
  8. 如何实现模拟人类视觉注意力的循环神经网络?
  9. 使用类计算矩形的面积
  10. 远程桌面连接错误:由于安全设置错误,客户端无法连接到远程计算机。