二叉树核心算法全解析
二叉树的基本概念与性质
二叉树是一种每个节点最多有两个子节点的树结构,通常称为左子节点和右子节点。二叉树的常见性质包括深度、高度、节点数等。理解这些基本概念是解决二叉树问题的前提。
二叉树的遍历方式包括前序遍历、中序遍历和后序遍历。前序遍历顺序为根节点、左子树、右子树;中序遍历顺序为左子树、根节点、右子树;后序遍历顺序为左子树、右子树、根节点。层次遍历则是按层从左到右访问节点。
二叉树的遍历算法
前序遍历的非递归实现通常使用栈来模拟递归过程。将根节点压入栈中,循环执行弹出栈顶节点、访问节点、右子节点压栈、左子节点压栈的操作。
中序遍历的非递归实现同样使用栈。从根节点开始,将所有左子节点压栈,弹出栈顶节点并访问,转向右子节点重复上述过程。
后序遍历的非递归实现较为复杂,需要记录节点的访问状态。可以使用双栈法或标记法来实现。双栈法的核心是先按根右左的顺序压入第一个栈,再弹出到第二个栈形成左右根的顺序。
二叉树的最大深度与最小深度
计算二叉树的最大深度可以通过递归实现。最大深度等于左右子树深度的较大值加一。递归终止条件是空节点返回零。
计算二叉树的最小深度需要考虑左右子树是否存在。最小深度等于左右子树深度的较小值加一,但当某子树为空时,应取另一子树的深度加一。
判断平衡二叉树
平衡二叉树的定义是左右子树的高度差不超过一,且左右子树都是平衡二叉树。可以通过后序遍历计算子树高度并判断平衡性。在计算高度的同时检查平衡性,不平衡时返回特定标记。
对称二叉树的判断
对称二叉树的判断需要比较左右子树是否镜像对称。递归函数的参数为两个节点,比较它们的值以及左右子节点的交叉对称性。初始调用时传入根节点的左右子节点。
二叉树的最近公共祖先
最近公共祖先问题可以通过递归或存储父节点的方式解决。递归法的思路是如果当前节点等于其中一个目标节点,则返回当前节点;否则递归查找左右子树,如果左右子树都找到则返回当前节点,否则返回非空的那个。
二叉搜索树的验证
验证二叉搜索树需要确保左子树的所有节点小于当前节点,右子树的所有节点大于当前节点。可以通过中序遍历检查序列是否严格递增,或递归传递当前节点的值范围进行验证。
二叉搜索树的插入与删除
在二叉搜索树中插入节点需要找到合适的位置,保持二叉搜索树的性质。删除操作分为三种情况:无子节点直接删除,有一个子节点用子节点替代,有两个子节点用后继节点替代并递归删除后继节点。
二叉树与双向链表转换
将二叉搜索树转换为排序的双向链表可以通过中序遍历实现。在中序遍历过程中修改节点的左右指针,记录前驱节点并与当前节点建立双向链接。最终需要处理头节点和尾节点的指针。
二叉树路径和问题
路径和问题要求找到从根节点到叶子节点的路径,使得路径上节点值之和等于目标值。可以通过深度优先搜索递归遍历所有路径,在叶子节点处检查路径和。回溯时注意恢复状态。
二叉树序列化与反序列化
序列化将二叉树转换为字符串表示,反序列化将字符串恢复为二叉树结构。常见方法包括前序遍历序列化,用特殊符号表示空节点。反序列化时按相同顺序重建节点和子树。
代码示例:二叉树的最大深度
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def maxDepth(root):
if not root:
return 0
left_depth = maxDepth(root.left)
right_depth = maxDepth(root.right)
return max(left_depth, right_depth) + 1
代码示例:验证二叉搜索树
def isValidBST(root):
def helper(node, lower=float('-inf'), upper=float('inf')):
if not node:
return True
val = node.val
if val <= lower or val >= upper:
return False
return helper(node.left, lower, val) and helper(node.right, val, upper)
return helper(root)
代码示例:二叉树的最近公共祖先
def lowestCommonAncestor(root, p, q):
if not root or root == p or root == q:
return root
left = lowestCommonAncestor(root.left, p, q)
right = lowestCommonAncestor(root.right, p, q)
if left and right:
return root
return left if left else right
5G.okacbd001.asia/PoSt/1123_331070.HtM
5G.okacbd002.asia/PoSt/1123_999964.HtM
5G.okacbd003.asia/PoSt/1123_865684.HtM
5G.okacbd004.asia/PoSt/1123_510137.HtM
5G.okacbd005.asia/PoSt/1123_906757.HtM
5G.okacbd006.asia/PoSt/1123_930283.HtM
5G.okacbd007.asia/PoSt/1123_680332.HtM
5G.okacbd008.asia/PoSt/1123_021724.HtM
5G.okacbd009.asia/PoSt/1123_387013.HtM
5G.okacbd010.asia/PoSt/1123_283437.HtM
5G.okacbd001.asia/PoSt/1123_519790.HtM
5G.okacbd002.asia/PoSt/1123_746074.HtM
5G.okacbd003.asia/PoSt/1123_423181.HtM
5G.okacbd004.asia/PoSt/1123_977498.HtM
5G.okacbd005.asia/PoSt/1123_438804.HtM
5G.okacbd006.asia/PoSt/1123_189193.HtM
5G.okacbd007.asia/PoSt/1123_984374.HtM
5G.okacbd008.asia/PoSt/1123_302818.HtM
5G.okacbd009.asia/PoSt/1123_782725.HtM
5G.okacbd010.asia/PoSt/1123_913068.HtM
5G.okacbd001.asia/PoSt/1123_382452.HtM
5G.okacbd002.asia/PoSt/1123_012308.HtM
5G.okacbd003.asia/PoSt/1123_314551.HtM
5G.okacbd004.asia/PoSt/1123_842631.HtM
5G.okacbd005.asia/PoSt/1123_664742.HtM
5G.okacbd006.asia/PoSt/1123_743679.HtM
5G.okacbd007.asia/PoSt/1123_075763.HtM
5G.okacbd008.asia/PoSt/1123_418194.HtM
5G.okacbd009.asia/PoSt/1123_165852.HtM
5G.okacbd010.asia/PoSt/1123_141650.HtM
5G.okacbd001.asia/PoSt/1123_711331.HtM
5G.okacbd002.asia/PoSt/1123_456403.HtM
5G.okacbd003.asia/PoSt/1123_432972.HtM
5G.okacbd004.asia/PoSt/1123_834194.HtM
5G.okacbd005.asia/PoSt/1123_892656.HtM
5G.okacbd006.asia/PoSt/1123_955867.HtM
5G.okacbd007.asia/PoSt/1123_270534.HtM
5G.okacbd008.asia/PoSt/1123_282701.HtM
5G.okacbd009.asia/PoSt/1123_610640.HtM
5G.okacbd010.asia/PoSt/1123_170732.HtM
5G.okacbd001.asia/PoSt/1123_972695.HtM
5G.okacbd002.asia/PoSt/1123_117241.HtM
5G.okacbd003.asia/PoSt/1123_183803.HtM
5G.okacbd004.asia/PoSt/1123_111969.HtM
5G.okacbd005.asia/PoSt/1123_823814.HtM
5G.okacbd006.asia/PoSt/1123_788500.HtM
5G.okacbd007.asia/PoSt/1123_575558.HtM
5G.okacbd008.asia/PoSt/1123_169702.HtM
5G.okacbd009.asia/PoSt/1123_086028.HtM
5G.okacbd010.asia/PoSt/1123_283901.HtM
5G.okacbd001.asia/PoSt/1123_913501.HtM
5G.okacbd002.asia/PoSt/1123_503639.HtM
5G.okacbd003.asia/PoSt/1123_327194.HtM
5G.okacbd004.asia/PoSt/1123_829144.HtM
5G.okacbd005.asia/PoSt/1123_325366.HtM
5G.okacbd006.asia/PoSt/1123_710217.HtM
5G.okacbd007.asia/PoSt/1123_775206.HtM
5G.okacbd008.asia/PoSt/1123_201000.HtM
5G.okacbd009.asia/PoSt/1123_148367.HtM
5G.okacbd010.asia/PoSt/1123_093654.HtM
5G.okacbd001.asia/PoSt/1123_508034.HtM
5G.okacbd002.asia/PoSt/1123_794480.HtM
5G.okacbd003.asia/PoSt/1123_640291.HtM
5G.okacbd004.asia/PoSt/1123_617005.HtM
5G.okacbd005.asia/PoSt/1123_716136.HtM
5G.okacbd006.asia/PoSt/1123_964058.HtM
5G.okacbd007.asia/PoSt/1123_825434.HtM
5G.okacbd008.asia/PoSt/1123_269310.HtM
5G.okacbd009.asia/PoSt/1123_317214.HtM
5G.okacbd010.asia/PoSt/1123_482980.HtM
5G.okacbd001.asia/PoSt/1123_818769.HtM
5G.okacbd002.asia/PoSt/1123_705173.HtM
5G.okacbd003.asia/PoSt/1123_407803.HtM
5G.okacbd004.asia/PoSt/1123_052511.HtM
5G.okacbd005.asia/PoSt/1123_273572.HtM
5G.okacbd006.asia/PoSt/1123_306176.HtM
5G.okacbd007.asia/PoSt/1123_239034.HtM
5G.okacbd008.asia/PoSt/1123_312779.HtM
5G.okacbd009.asia/PoSt/1123_684986.HtM
5G.okacbd010.asia/PoSt/1123_093147.HtM
