二叉树
二叉树
咕噜咕噜day
day day up!
展开
-
判断是否平衡二叉树
判断是否平衡二叉树,python实现原创 2022-06-15 11:16:10 · 74 阅读 · 0 评论 -
判断是否完全二叉树
python实现,判断是否完全二叉树原创 2022-06-15 11:01:39 · 445 阅读 · 0 评论 -
判断是否二叉搜索树
判断二叉搜索树,python实现原创 2022-06-15 10:39:28 · 110 阅读 · 0 评论 -
合并二叉树
合并二叉树原创 2022-06-15 09:28:16 · 69 阅读 · 0 评论 -
二叉搜索树与双向链表
二叉搜索树与双向链表原创 2022-06-15 09:20:17 · 96 阅读 · 0 评论 -
判断是否对称二叉树
判断二叉树是否对称原创 2022-06-15 08:46:54 · 107 阅读 · 0 评论 -
剑指offer【68】:二叉树最近祖先节点
题目:思路+代码:思路:找就近的祖先节点,采用递归方法,考虑3种边界情况,边界情况:1. p,q在左右两边2. p,q都在左子树或右子树3. p或q有一个是根节点递归结束:如果not root, 找到节点为p或q,return root当前层递归:返回值:在左子树和右子树进行递归,并判断如果左子树返回值为空,则说明左子树不存在,则返回右子树,同理右子树; 如果左右子树同时存在值则返回 root为最近祖先节点class Solution: def lowestComm.原创 2020-07-01 09:37:01 · 168 阅读 · 0 评论 -
剑指offer【68】:二叉搜索树的最近祖先节点
题目:思路+代码:思路一:非递归迭代 二叉树节点值唯一,且为二叉搜索树 非递归写法: 所以根据值大小不断从根节点,往下一层判断;直到p,q分布在 子树根节点的左右 时间复杂度:O(n),当二叉树为链表时,root为某一个节点的直接根节点 空间复杂度:O(1)思路二:递归写法 递归写法 时间复杂度:O(n),...原创 2020-06-30 12:22:19 · 192 阅读 · 0 评论 -
剑指 Offer 【37】. 序列化二叉树
题目:思路+代码:思路:1.序列化,采用层序遍历;这里添加null节点操作,是判断节点是否为空添加,所以res确实有多添加null2.反序列化:先构建根节点,遍历有效的节点val,每次pop一个节点就添加它的左右节点;class Codec: def serialize(self, root): """Encodes a tree to a single string. :type root: TreeNode原创 2020-06-29 10:13:55 · 144 阅读 · 0 评论 -
剑指offer【34】:二叉树和为某一值的路径
二叉树和为某个值的路径原创 2020-06-28 19:39:58 · 152 阅读 · 0 评论 -
剑指offer【26】:判读B是否是A的子结构
题目:思路+代码:class Solution: # 思路:逆推法,要判断B是否是A子结构就是判断,拿B分别和A, A.left, A.right 开始比较; # 递归思路: # 1.递归结束判断:B越过叶子节时True, B越过叶子节点时,False, A.val != B.val 时False # 2.返回值:当A,B都存在时,递归判断A.left,A.right def isSubStructure(self, A: TreeNode,原创 2020-06-26 15:03:02 · 157 阅读 · 0 评论 -
剑指offer【7】:重构二叉树,递归思路
思路:最终是要重构二叉树;1. 确定子树的根节点:递归(当前子树根在前序中的索引,left,right)每层传入根节点在前序遍历的索引;在中序遍历中拿到根节点的索引,建立 当前子树的根节点2. 确定当前子树的左节点:递归(左子树的根节点在前序索引, left, 当前根在中序索引-1)3. 确定当前子树的右节点:递归(右子树的根节点在前序索引, 当前根在中序索引+1, right)其他:为了方便查询中序中节点的索引,建立map(节点:idx)建立递归思路:递归结束:子树的左边界idx >原创 2020-06-26 11:00:48 · 176 阅读 · 0 评论 -
剑指offer【54】:返回二叉搜索树的第K大节点
题目:思路+代码:思路一:pythonic写法:三行代码,中序遍历二叉树返回遍历listclass Solution: def kthLargest(self, root: TreeNode, k: int) -> int: # pythonic写法 def dfs(root): return dfs(root.left) + [root.val] + dfs(root.right) if root else []原创 2020-06-25 00:47:51 · 170 阅读 · 0 评论 -
剑指offer【55】层序遍历 后序遍历返回二叉树深度
题目:思路+代码:层序遍历:层序遍历计算二叉树层数,时间复杂度O(n),空间复杂度O(n)class Solution: def maxDepth(self, root: TreeNode) -> int: # # 层序遍历计算二叉树层数,时间复杂度O(n),空间复杂度O(n) if not root: return 0 depth = 0 node_list = [] node_原创 2020-06-19 11:45:38 · 297 阅读 · 0 评论 -
剑指offer【33】: 二叉搜索树的后序遍历序列
题目:思路+代码:class Solution: def verifyPostorder(self, postorder: List[int]) -> bool: # 递归法 # 1.递归结束条件:直到叶子节点,没有左右子树,此时i=j,此时表示True,符合二叉搜索树 # 2.递归推导:从头到尾找到第一个大于root节点的值;然后判断从这个值开始是不是后面序列都大于root值,然后分布对左子树和右子树进行递归 .原创 2020-06-18 10:19:05 · 144 阅读 · 0 评论 -
剑指offer【32-3】:之字形逐层打印层序遍历每层结果
题目:思路+代码:class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: # 思路:之字形打印类似于层序遍历保存每层节点值,只是增加一个index标识符 if not root: return [] # 初始化一个结果列表:res;标识符index;节点列表node_list; res = [] .原创 2020-06-17 10:13:36 · 116 阅读 · 0 评论 -
剑指offer【32-2】:层序遍历保存每一层节点
题目:思路+代码:class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: # 思路:层序遍历二叉树分开保存每一层的节点值,初始化res:输出保存列表;nodel_list是保存节点列表,列表内容更新来自于每一层 # layer_nodel列表;layer_val 保存每一层值; if not root: re原创 2020-06-17 09:50:18 · 197 阅读 · 0 评论 -
剑指offer【32】:层序遍历打印二叉树
题目:思路+代码:import queueclass Solution: def levelOrder(self, root: TreeNode) -> List[int]: # 思路:使用栈保存每层从左至右的左节点和右节点,一个list保存层序遍历节点的值; # 用list实现 if not root:return [] res, node_list = [],[] node_list..原创 2020-06-16 11:40:24 · 204 阅读 · 0 评论 -
剑指offer【27】:二叉树镜像
题目:思路+实现:class Solution: def mirrorTree(self, root: TreeNode) -> TreeNode: # 递归思路:二叉树的镜像,无非就是交换左右子树就行;这里采用递归的方法,每次先存储左节点,传入右节点递归,递归赋值给左节点; # 从最后一个右叶子节点完成后,开始从往上,进行左子树的递归; if not root: return .原创 2020-06-16 10:29:21 · 176 阅读 · 0 评论