判断二叉树是否镜像
时间: 2023-08-13 22:03:12 浏览: 244
判断一棵二叉树是否是镜像二叉树的方法是:判断其左右子树是否镜像对称。具体实现可以使用递归算法,从根节点开始,判断左右子树是否镜像对称,如果是,则递归判断左子树的左子树和右子树的右子树是否镜像对称,以及左子树的右子树和右子树的左子树是否镜像对称。如果所有的节点都满足镜像对称的条件,则该二叉树是镜像二叉树,否则不是。
以下是一个示例代码:
```
bool isMirror(TreeNode* left, TreeNode* right) {
if (left == nullptr && right == nullptr) return true;
if (left == nullptr || right == nullptr) return false;
if (left->val != right->val) return false;
return isMirror(left->left, right->right) && isMirror(left->right, right->left);
}
bool isSymmetric(TreeNode* root) {
if (root == nullptr) return true;
return isMirror(root->left, root->right);
}
```
该算法的时间复杂度为O(n),其中n是二叉树中节点的数量。
相关问题
如何判断二叉树镜像对称
判断一棵二叉树是否镜像对称,通常可以通过递归的方式来实现。这里有一个简单的方法,称为“自底向上”或“深度优先搜索”(Depth-First Search, DFS):
1. 递归方法:
- 基本情况:如果根节点为空,那么这棵树就是空树,自然是对称的。
- 对称检查:对于非空的根节点,分别检查它的左子树和右子树是否镜像对称。
- 左右子树对比:递归地检查根节点的左子树和右子树是否是镜像(即它们的左右子树互换位置后是否相等)。
- 如果两子树对称,返回true;否则,返回false。
2. 可能使用的过程:
- 定义一个函数`isSymmetric(root)`,接受二叉树的根节点作为参数。
- 判断`root`的左右子节点是否为空,然后判断它们是否相等(如果相等则不需要继续比较,因为它们都是空)。
- 如果它们不等,调用`isSymmetric`分别递归检查左子树和右子树,并返回它们的对比结果。
一颗二叉树的镜像二叉树如果和原树的结构相同且点权相等。则该二叉树为对称二叉树。 给定一颗二叉树,判定其是否为对称二叉树。
判断一棵二叉树是否是对称的,可以采用递归的方法。基本思路是,对于树的根节点,我们比较它的左孩子和右孩子的高度是否相等,以及它们自身的值是否相等。如果是,则继续分别检查它们的左子树和右子树是否也是对称的;如果不是,则整棵树就不是对称的。
具体步骤如下:
1. 如果当前节点为空,那么它肯定是对称的,返回 true。
2. 如果左右子节点都不为空,我们需要比较 left = right 的镜像(即 right.left 和 left.right),并且 left.val == right.val。如果这两个条件都满足,我们再递归地检查 left 和 right 的子树是否对称。
3. 如果只有一边有子节点或者值不相等,说明当前节点的左右部分不对称,返回 false。
这个过程会一直递归到叶子节点,因为叶子节点没有子节点自然是对称的。
Python伪代码可以这样表示:
```python
def isSymmetric(root):
if root is None:
return True
if root.left and root.right and root.left.val != root.right.val:
return False
return isSymmetric(root.left) and isSymmetric(root.right)
```
阅读全文