Python递归_打印节点信息
Python递归_打印节点信息
递归特性:
1、必须由一个明确的结束条件
2、每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少
3、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时通过栈(stack)
这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,
栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致
栈溢出)
一、需求1:打印所有的节点
[root@db01 test]# cat duigui1.py
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author: davie
"""
递归特性:
1、必须由一个明确的结束条件
2、每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少
3、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时通过栈(stack)
这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,
栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致
栈溢出)
"""
# 递归练习题
menus = [
{
'text':'北京',
'children':[
{'text':'朝阳','children':[]},
{'text':'昌平','children':[
{'text':'沙河','children':[]},
{'text':'回龙观','children':[]}
]}
]
},
{
'text':'上海',
'children':[
{'text':'宝山','children':[]},
{'text':'金山','children':[]}
]
}
] # 1、打印所有的节点
# 2、输入一个节点名字,你要遍历找,找到了,就打印它,并返回true。 def print_nodes(menus):
for sub_menu in menus:
menu_parent_text = sub_menu['text']
menu_children = sub_menu['children']
if menu_parent_text:
print(menu_parent_text)
print('\t',menu_children)
print_nodes(menus)
[root@db01 test]# # 执行结果 [root@db01 test]# python3 duigui1.py
北京
[{'text': '朝阳', 'children': []}, {'text': '昌平', 'children': [{'text': '沙河', 'children': []}, {'text': '回龙观', 'children': []}]}]
上海
[{'text': '宝山', 'children': []}, {'text': '金山', 'children': []}]
[root@db01 test]#
二、需求2:打印所有的节点,输入一个节点名字,你要遍历找,找到了,就打印它,并返回true
[root@db01 test]# cat duigui2.py
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author: davie
"""
递归特性:
1、必须由一个明确的结束条件
2、每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少
3、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时通过栈(stack)
这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,
栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致
栈溢出)
"""
# 递归练习题
menus = [
{
'text':'北京',
'children':[
{'text':'朝阳','children':[]},
{'text':'昌平','children':[
{'text':'沙河','children':[]},
{'text':'回龙观','children':[]}
]}
]
},
{
'text':'上海',
'children':[
{'text':'宝山','children':[]},
{'text':'金山','children':[]}
]
}
] # 2、打印所有的节点,输入一个节点名字,你要遍历找,找到了,就打印它,并返回true。
def print_nodes(menus):
for sub_menu in menus:
menu_parent_text = sub_menu['text']
menu_children = sub_menu['children']
if menu_parent_text:
print(menu_parent_text)
print('\t',menu_children)
print_nodes(menus) def print_node(menu,node,layer):
for sub_menu in menu:
menu_parents_text = sub_menu["text"]
menu_children_node = sub_menu["children"]
#print("menu_parents_text = ",menu_parents_text)
if node == menu_parents_text:
print("找到%s在第%s层" %(node,layer)) # 返回到外层
return True
else:
if print_node(menu_children_node,node,layer+1) == True: # 如果里层返回True,继续向上返回True
return True
node_input = input("请输入一个节点的名字>:").strip()
print(print_node(menus,node_input,1)) [root@db01 test]# # 执行结果
[root@db01 test]# python3 duigui2.py
北京
[{'text': '朝阳', 'children': []}, {'text': '昌平', 'children': [{'text': '沙河', 'children': []}, {'text': '回龙观', 'children': []}]}]
上海
[{'text': '宝山', 'children': []}, {'text': '金山', 'children': []}]
请输入一个节点的名字>:海口
None
[root@db01 test]# python3 duigui2.py
北京
[{'text': '朝阳', 'children': []}, {'text': '昌平', 'children': [{'text': '沙河', 'children': []}, {'text': '回龙观', 'children': []}]}]
上海
[{'text': '宝山', 'children': []}, {'text': '金山', 'children': []}]
请输入一个节点的名字>:东城区
None
[root@db01 test]# python3 duigui2.py
北京
[{'text': '朝阳', 'children': []}, {'text': '昌平', 'children': [{'text': '沙河', 'children': []}, {'text': '回龙观', 'children': []}]}]
上海
[{'text': '宝山', 'children': []}, {'text': '金山', 'children': []}]
请输入一个节点的名字>:沙河
找到沙河在第3层
True
[root@db01 test]# python3 duigui2.py
北京
[{'text': '朝阳', 'children': []}, {'text': '昌平', 'children': [{'text': '沙河', 'children': []}, {'text': '回龙观', 'children': []}]}]
上海
[{'text': '宝山', 'children': []}, {'text': '金山', 'children': []}]
请输入一个节点的名字>:金山
找到金山在第2层
True
[root@db01 test]#
Python递归_打印节点信息的更多相关文章
- Python traceback 模块, 打印异常信息
Python感觉是模仿Java, 到处都需要加try..catch.... 这里记录一下用法,方便后续使用. # -*- coding:utf-8 -*- import os import loggi ...
- [已解决] Python logging 重复打印日志信息
问题描述 问题代码如下: def get_logger(logger_name): """得到日志对象""" logger = loggin ...
- php_公共方法01_传入数组_打印可见信息
function decodeUnicode($str) { return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'convert', $str ...
- php 数据集转换树、递归重组节点信息多维数组(转)
一.将数据集转换成树 /** * 将返回的数据集转换成树 * @param array $list 数据集 * @param string $pk 主键 * @param string $pid 父节 ...
- [python]打印异常信息的不同方式
异常捕获 try: execpt Exception as e: print(str(e)) 打印异常信息的方式 1.str(e) 返回字符串类型,只给出异常信息,不包括异常信息的类型,如1/0的异常 ...
- python使用进程池多进程时,如何打印错误信息
一.说明 1.python进程池进行多进程运行时,如果有错误,该进程会直接跳过,并且不会打印错误信息. 2.如果需要了解到进程内的错误信息,此时就需要通过捕获异常来输出错误信息了. 二.具体方法如下: ...
- java 递归及其经典应用--求阶乘、打印文件信息、计算斐波那契数列
什么是递归 我先看下百度百科的解释: 一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的.用递归过程定义的函数,称为递归函数,例如连加.连乘及阶乘等.凡是递归的函数,都是可计算的,即 ...
- python学习(五)--打印错误信息
from urllib import request #打印错误信息 except Exceptionlist = [ "http://www.baidu11.com/", &qu ...
- python学习_数据处理编程实例(二)
在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...
随机推荐
- source 和 .
Linux Source命令及脚本的执行方式解析 当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录:这时就想到用source命令,如:source /etc/profile 对 ...
- 如何使用CSS 让Table的最后一列的右边框不显示
table{ border-collapse:collapse; } .templateColumn{ border-right:1px solid #AAA; } table.templateCon ...
- 洛谷 P1126 机器人搬重物
题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径 $1.6 米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个 N×MN \times MN×M ...
- 学习Linux系统的态度及技巧
Linux作为一种简单快捷的操作系统,现在被广泛的应用.也适合越来越多的计算机爱好者学习和使用.但是对于Linux很多人可能认为很难,觉得它很神秘,从而对其避而远之,但事实真的是这样么?linux真的 ...
- Android系统启动概要
注:Java系统服务与本地系统服务标注反了 1.Linux内核 Android系统启动时,首先通过BootLoader(系统加载器)加载Linux内核,在Linux加载启动时,首先初始化内核,再调用i ...
- 解决vscode egg调试出现: this socket has been ended by other party【转】
如果是最新的1.22 方案一 回退版本到1.21.1 https://code.visualstudio.com/updates/v1_21 方案二 退而求其次, 更改debug配置, 待官方或egg ...
- 洛谷P1395 会议 题解
$题目$ 为什么这个题会有图论的标签啊,虽然图论也包括找树的重心,可是这很容易让人联想到最短路,但不得不说,这是一个典型的找树的重心模板题. 树的重心是什么? 找到一个点,其所有的子树中最大的子树节点 ...
- POJ3417 Network(算竞进阶习题)
LCA + 树上差分(边差分) 由题目意思知,所有主要边即为该无向图的一个生成树. 我们考虑点(u,v)若连上一条附加边,那么我们切断(u,v)之间的主要边之后,由于附加边的存在,(u,v)之间的路径 ...
- Ikki's Story IV - Panda's Trick POJ - 3207(水2 - sat 在圈内 还是 在圈外)
题意: 就是一个圈上有n个点,给出m对个点,这m对个点,每一对都有一条边,合理安排这些边在圈内或圈外,能否不相交 解析: 我手残 我手残 我手残 写一下情况 只能是一个在圈外 一个在圈内 即一个1一个 ...
- Apache 开启压缩传输
在 /etc/httpd/conf/httpd.conf 中添加如下配置: # Enable gzip - by Jerryhuang # <IfModule mod_deflate.c> ...