判断两颗二叉树的相同的代码
时间: 2024-11-20 07:01:09 浏览: 21
判断两个二叉树是否相同的常见算法是递归遍历。以下是使用递归方法的Python代码示例:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def isSameTree(p: TreeNode, q: TreeNode) -> bool:
if p is None and q is None: # 如果两者都为空,它们相同
return True
elif p is None or q is None: # 如果其中一个为空,它们不同
return False
else:
return p.val == q.val and \
isSameTree(p.left, q.left) and \
isSameTree(p.right, q.right)
```
这个函数首先检查两个根节点是否值相等,然后递归地比较它们的左子树和右子树是否也相同。如果所有的条件都满足,那么就认为两棵树相同。
相关问题
判断两颗二叉树的相同的C语言代码
在C语言中,判断两棵二叉树是否相同的算法通常通过递归实现,可以使用深度优先搜索(Depth First Search, DFS)。以下是简单的思路:
首先,我们需要定义两个结构体分别表示二叉树节点:
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
接下来,我们可以编写一个函数来比较两个树的根节点及其子树:
```c
int isSameTree(TreeNode* p, TreeNode* q) {
if (p == NULL && q == NULL)
return 1; // 都为空,视为相同
if (p == NULL || q == NULL)
return 0; // 有一个为空,视为不同
// 如果值、左子树和右子树都相同,则认为两棵树相同
return (p->val == q->val) &&
isSameTree(p->left, q->left) &&
isSameTree(p->right, q->right);
}
```
这个函数会先检查两个节点是否都为空,然后逐层递归地对比它们的值以及左右子树。
利用python设计判断两颗二叉树是否相同的算法
可以使用递归的方式判断两颗二叉树是否相同。具体实现可以参考以下代码:
```python
# 定义二叉树节点类
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 判断两颗二叉树是否相同的函数
def isSameTree(p: TreeNode, q: TreeNode) -> bool:
# 如果两个二叉树均为空,则认为它们相同
if not p and not q:
return True
# 如果一个二叉树为空,另一个不为空,则认为它们不相同
if not p or not q:
return False
# 如果两个二叉树的根节点的值不相同,则认为它们不相同
if p.val != q.val:
return False
# 递归判断两个二叉树的左子树和右子树是否相同
return isSameTree(p.left, q.left) and isSameTree(p.right, q.right)
```
在上述代码中,我们首先判断两个二叉树是否均为空,如果是,则认为它们相同;如果一个二叉树为空,另一个不为空,则认为它们不相同;如果两个二叉树的根节点的值不相同,则认为它们不相同;最后,我们递归判断两个二叉树的左子树和右子树是否相同。
阅读全文