4树 二叉树 二叉搜索树 堆

#python
class TreeNode: 
def __init__(self, val): 
self.val = val 
self.left, self.right = None, None
public class TreeNode {
	public int val;
	public TreeNode left, right;
	public TreeNode(int val) {
		this.val = val;
		this.left = null;
		this.right = null; } }

示例代码
前序 中序 后序

示例代码
def preorder(self, root): 
	if root: 
	self.traverse_path.append(root.val) 
	self.preorder(root.left) 
	self.preorder(root.right)
def inorder(self, root):
	if root: 
	self.inorder(root.left) 
	self.traverse_path.append(root.val) 
	self.inorder(root.right)
def postorder(self, root):
	if root: 
	self.postorder(root.left) 
	self.postorder(root.right) 
	self.traverse_path.append(root.val)
二叉搜索树
  1. 左子树上所有结点的值均小于它的根结点的值;
  2. 右子树上所有结点的值均大于它的根结点的值;
  3. 以此类推:左、右子树也分别为二叉查找树。 (这就是 重复性!)
    中序遍历:升序排列
    在这里插入图片描述
堆 heap 优先队列 priority_queue

可以迅速找到一堆数中的最大或者最小值的数据结构
根节点最大的堆叫做大顶堆,根节点最小的堆叫做小顶堆
插入
删除
查找

二叉堆的性质

通过完全二叉树来实现
二叉堆(大顶)性质:
是一棵完全树
树中任意节点的值总>=其子节点的值

细节:
二叉堆一般是通过数组来实现
假设第一个元素在数组中的索引是0,左孩子是2i+1,右孩子是2i+2,父节点是i-1/2
插入:插入到尾部,依次向上调整 logn
删除堆顶:堆尾替换到顶部,以词向下调整整个堆的结构
堆的实现代码

#DFS
visited = set() # 和树中的DFS最大区别
def dfs(node, visited):
	if node in visited: # terminator
	# already visited 
	return 
	visited.add(node) 
# process current node here. 
...
	for next_node in node.children(): 
		if not next_node in visited: 
			dfs(next_node, visited)
#BFS
def BFS(graph, start, end):
	queue = [] 
	queue.append([start]) 
	visited = set() # 和树中的BFS的最大区别
	while queue: 
		node = queue.pop() 
	visited.add(node)
	process(node) 
	nodes = generate_related_nodes(node) 
	queue.push(nodes)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值