二叉树的三种常见遍历方式是前序遍历、中序遍历和后序遍历。另外,最近公共祖先和节点间距离等问题是二叉树常见的问题之一。
1. 二叉树遍历方式:
-
前序遍历(Preorder Traversal): 根-左-右
def preorderTraversal(root):
if not root:
return []
return [root.val] + preorderTraversal(root.left) + preorderTraversal(root.right)
- 中序遍历(Inorder Traversal): 左-根-右
def inorderTraversal(root):
if not root:
return []
return inorderTraversal(root.left) + [root.val] + inorderTraversal(root.right)
- 后序遍历(Postorder Traversal): 左-右-根
def postorderTraversal(root):
if not root:
return []
return postorderTraversal(root.left) + postorderTraversal(root.right) + [root.val]
2. 最近公共祖先(Lowest Common Ancestor):
- 通过递归在二叉树中查找两个节点的最近公共祖先。
- 在节点的左右子树中递归查找目标节点,如果目标节点在左右子树中都找到,则当前节点即为最近公共祖先。
- 如果一个目标节点在左子树中找到,另一个目标节点在右子树中找到,则当前节点即为最近公共祖先。
3. 节点间距离:
- 节点间距离问题常常需要结合树的遍历或递归求解。
- 求两个节点间距离可以通过求它们的最近公共祖先,然后分别计算到公共祖先的距离,最后相加即可得到距离。
这些问题都可以通过递归或迭代方式在二叉树中解决。在处理这些问题时,理解二叉树的遍历方式和递归思想会有很大的帮助。