数据结构习题回顾与总结 (2) List Leaves
2017-09-27 09:42
169 查看
还是pat上的一道习题,具体描述如下:
题意大致是这样的:输入的第一行代表树中总节点个数,然后后面的行里,第一位代表左节点的位置,第二位代表右节点的位置,如果是”-“则代表左节点或右节点不存在。
举个例子:第0个节点也就是8下面的那行是1 -,就代表节点0的左节点为第1个节点(- -)右节点不存在。
然后根据给出的树,按照从上到下从左到右的顺序将所有的叶节点输出,输出形式如图。
看到这个题之后感觉很容易就会想到使用层序遍历。按照层序遍历将节点们按层序遍历的顺序放到一个list里,然后判断谁的左右都是“-”,然后按顺序输出即可。
首先大致回顾一下层序遍历,第一点是从上到下从左到右,第二点就是用队列或者堆栈实现。
下面是python的源码:
树的构造没有采用class定义,而是使用了线性表(一个二维数组),主要还是因为pat测试系统跑包含类定义的程序经常崩。
主要函数有两个:gen():寻找根节点。sortt:层序遍历并将遍历结果保存并返回。
题意大致是这样的:输入的第一行代表树中总节点个数,然后后面的行里,第一位代表左节点的位置,第二位代表右节点的位置,如果是”-“则代表左节点或右节点不存在。
举个例子:第0个节点也就是8下面的那行是1 -,就代表节点0的左节点为第1个节点(- -)右节点不存在。
然后根据给出的树,按照从上到下从左到右的顺序将所有的叶节点输出,输出形式如图。
看到这个题之后感觉很容易就会想到使用层序遍历。按照层序遍历将节点们按层序遍历的顺序放到一个list里,然后判断谁的左右都是“-”,然后按顺序输出即可。
首先大致回顾一下层序遍历,第一点是从上到下从左到右,第二点就是用队列或者堆栈实现。
下面是python的源码:
data = 0 left = 1 right = 2 n = int(input()) tr = [] leaves = [] def gen(tree,n): biao = [0]*n for i in range(n): if tree[i][left]!=-1: biao[tree[i][left]] = 1 if tree[i][right]!=-1: biao[tree[i][right]] = 1 else: continue for i in range(n): if biao[i]==0: return i else: continue def sortt(tree,root,n): res = [] que = [] if que == []: que.insert(0,tree[root]) while que!=[]: k = que.pop() res.append(k) if k[left] != -1: que.insert(0,tree[k[left]]) if k[right] != -1: que.insert(0,tree[k[right]]) else: continue return res for i in range(n): k=[] q = input().split() k.append(i) if q[0] != '-': k.append(int(q[0])) else: k.append(-1) if q[1] != '-': k.append(int(q[1])) else: k.append(-1) tr.append(k) root = gen(tr,n) mid = sortt(tr,root,n) for i in range(len(mid)): if mid[i][left]==-1 and mid[i][right]==-1: leaves.append(mid[i][0]) print(" ".join([str(x) for x in leaves]))
树的构造没有采用class定义,而是使用了线性表(一个二维数组),主要还是因为pat测试系统跑包含类定义的程序经常崩。
主要函数有两个:gen():寻找根节点。sortt:层序遍历并将遍历结果保存并返回。
相关文章推荐
- List Leaves【数据结构测试3.2】
- 《数据结构(C语言版)》严蔚敏第4版读书总结与数据结构入门回顾
- Redis内部数据结构总结(4)quicklist
- 数据结构回顾与总结 图(2)两种基本的遍历方式
- SICP 习题 (2.26)解题总结:列表操作符append cons list
- STL之vector,list复习总结回顾
- 「学习总结-Haskell-2」Haskell重要数据结构:List
- Java基础课程学习总结,使用LinkedList简单模拟队列数据结构和堆栈数据结构的实现
- 集合中list、ArrayList、LinkedList、Vector的区别、Collection接口的共性方法以及数据结构的总结
- 数据结构(十七)赫夫曼树 树总结回顾
- SICP 习题 (2.7) 解题总结 : 定义区间数据结构
- 总结回顾 - 数据结构和算法98(完)
- 数据结构复习之排序算法的总结回顾
- java基本数据结构之List常用实现类总结
- pat 03-树2 List Leaves(mooc 陈越、何钦铭-数据结构)
- 【数据结构】LinkedList原理及实现学习总结
- 数据结构:栈和队列的总结回顾
- Redis基本数据结构总结之STRING和LIST
- Redis内部数据结构总结(5)skiplist
- 数据结构-List接口-LinkedList类-Set接口-HashSet类-Collection总结