【Leetcode】Python 代码本地构造二叉树、链表
生成二叉树
# 节点类
class Node(object):def __init__(self, x):self.val = xself.left = Noneself.right = None
# 树生成代码
def generate_tree(vals):if len(vals) == 0:return Noneque = [] # 定义队列fill_left = True # 由于无法通过是否为 None 来判断该节点的左儿子是否可以填充,用一个记号判断是否需要填充左节点for val in vals:node = Node(val) if val else None # 非空值返回节点类,否则返回 Noneif len(que)==0:root = node # 队列为空的话,用 root 记录根结点,用来返回que.append(node)elif fill_left:que[0].left = nodefill_left = False # 填充过左儿子后,改变记号状态if node: # 非 None 值才进入队列que.append(node)else:que[0].right = nodeif node:que.append(node)que.pop(0) # 填充完右儿子,弹出节点fill_left = True # return root
# 定义一个dfs打印中序遍历
def dfs(node):if node is not None:dfs(node.left)print(node.val, end=' ')dfs(node.right)
# 定义一个bfs打印层序遍历
def bfs(node):que = []que.append(node)while que:l = len(que)for _ in range(l):tmp = que.pop(0)print(tmp.val, end=' ')if tmp.left:que.append(tmp.left)if tmp.right:que.append(tmp.right)print('|', end=' ')# test
null = None
vals = [3,9,20,null,null,15,7]
tree = generate_tree(vals)
print('中序遍历:')
dfs(tree) # 9 3 15 20 7
print('\n层序遍历:')
bfs(tree) # 3 | 9 20 | 15 7 |
生成列表
#定义节点
class ListNode():def __init__(self, x):self.val = xself.next = None
#将传入的数组转化为链表
def create_linked_list(arr):head = ListNode(arr[0])cur = headfor i in range(1, len(arr)):cur.next = ListNode(arr[i])cur = cur.nextreturn head
#传入链表头节点,以数组形式返回
def print_linked_list(head):cur = headres = []while cur:res.append(cur.val)cur = cur.nextreturn res
class Solution():def mergeTwoLists(self, l1, l2):pre = ListNode(0)head = prewhile l1 and l2:if l1.val >= l2.val:pre.next = l2l2 = l2.nextelse:pre.next = l1l1 = l1.nextpre = pre.nextpre.next = l1 if l1 else l2return head.next
if __name__ == "__main__":head1 = create_linked_list([1, 2, 4])head2 = create_linked_list([1, 3, 4])solution = Solution()sorted_lists = solution.mergeTwoLists(head1, head2)print(print_linked_list(sorted_lists))
#输出:[1, 1, 2, 3, 4, 4]
注:放到本地可以直接跑哦~
猜你喜欢:
【Leetcode】Python 代码本地构造二叉树、链表相关推荐
- python构造一个二叉树_二叉树-链表存储,用二叉树构造表达式(Python实现)
既然用到二叉树了,直观上链表的方式比较容易接受,下面用python实现简单的二叉树.二叉树是递归结构,Python的list也是递归结构,基于list类型很容易实现二叉树: 下面是函数 def bin ...
- 刷题记录8---验证二叉搜索树+二叉树的层序遍历+从前序与中序遍历序列构造二叉树+二叉树展开为链表+二叉树的最近公共祖先
前言 所有题目均来自力扣题库中的hot 100,之所以要记录在这里,只是方便后续复习 98.验证二叉搜索树 题目: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树. 有效 二叉搜 ...
- 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...
- leetcode 105. 从前序与中序遍历序列构造二叉树 c语言递归解法
如题: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素.例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3 ...
- 单链表反转的原理和python代码实现
链表是一种基础的数据结构,也是算法学习的重中之重.其中单链表反转是一个经常会被考察到的知识点. 单链表反转是将一个给定顺序的单链表通过算法转为逆序排列,尽管听起来很简单,但要通过算法实现也并不是非常容 ...
- python算法与数据结构-二叉树的代码实现(46)
阅读目录 一.二叉树回忆 二.二叉树比链表好在哪里? 三.二叉树的节点定义(C语言版) 四.定义一个二叉树(C语言版) 五.初始化树(C语言版) 六.创建节点(C语言版) 七.插入节点(C语言版) 八 ...
- 二叉树的中序遍历_Go 刷 leetcode从前序与中序遍历序列构造二叉树
今天为大家讲解 LeetCode 第 105 题,是一道关于数组和树的题目. 题目描述 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 前序遍历 pre ...
- [Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]
[问题描述][中等] [解答思路] copyOfRange class Solution {public TreeNode constructFromPrePost(int[] pre, int[] ...
- [Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]
[问题描述][中等] [解答思路] public class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) { ...
最新文章
- [CTO札记]搜索结果第3页,也会进来
- 个人重构之一般用户实现
- CentOS 6.x搭建Open***实现双IDC互联
- 剑指OFFER之跳台阶(九度OJ1388)
- C++ vector类详解
- mac修改jupyter notebook启动时的打开目录
- elementui 表格英文加数字排序_解决vue elementUI中table里数字、字母、中文混合排序问题...
- 苹果手机数据线充不了电_自动洗地机充不了电,洗地机厂家
- 修改注册表阻止Office XP发送错误报告
- 红米K40游戏 红米Note10Pro等出现dm-verity corruption your device is corrupt 设备在5秒内关机 无限重启 怎么解决
- 使用第三方sdk时问题
- [C#][转载]C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母
- 探讨服务端自定义生成PDF的几种方案
- c++面试常见题·Part 2 数据结构和STL
- IT小盆友:注意20种习惯最耗元气
- usb转vga转换器
- 爆火的Web3.0背后,百度营销如何抓住流量密码?
- 扎根基层一线 助力社区(村)发展
- Qt excel 操作使用说明
- python中的模块和类_Python模块与类
热门文章