mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 08:50:15 +08:00
Merge pull request #565 from ironartisan/master
添加 0100.相同的树 java和python3版本
This commit is contained in:
@ -139,29 +139,29 @@ public:
|
|||||||
## 迭代法
|
## 迭代法
|
||||||
|
|
||||||
```C++
|
```C++
|
||||||
lass Solution {
|
class Solution {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
bool isSameTree(TreeNode* p, TreeNode* q) {
|
bool isSameTree(TreeNode* p, TreeNode* q) {
|
||||||
if (p == NULL && q == NULL) return true;
|
if (p == NULL && q == NULL) return true;
|
||||||
if (p == NULL || q == NULL) return false;
|
if (p == NULL || q == NULL) return false;
|
||||||
queue<TreeNode*> que;
|
queue<TreeNode*> que;
|
||||||
que.push(p); //
|
que.push(p); // 添加根节点p
|
||||||
que.push(q); //
|
que.push(q); // 添加根节点q
|
||||||
while (!que.empty()) { //
|
while (!que.empty()) { //
|
||||||
TreeNode* leftNode = que.front(); que.pop();
|
TreeNode* leftNode = que.front(); que.pop();
|
||||||
TreeNode* rightNode = que.front(); que.pop();
|
TreeNode* rightNode = que.front(); que.pop();
|
||||||
if (!leftNode && !rightNode) { //
|
if (!leftNode && !rightNode) { // 若p的节点与q的节点都为空
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//
|
// 若p的节点与q的节点有一个为空或p的节点的值与q节点不同
|
||||||
if ((!leftNode || !rightNode || (leftNode->val != rightNode->val))) {
|
if ((!leftNode || !rightNode || (leftNode->val != rightNode->val))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
que.push(leftNode->left); //
|
que.push(leftNode->left); // 添加p节点的左子树节点
|
||||||
que.push(rightNode->left); //
|
que.push(rightNode->left); // 添加q节点的左子树节点点
|
||||||
que.push(leftNode->right); //
|
que.push(leftNode->right); // 添加p节点的右子树节点
|
||||||
que.push(rightNode->right); //
|
que.push(rightNode->right); // 添加q节点的右子树节点
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -173,23 +173,71 @@ public:
|
|||||||
Java:
|
Java:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
|
// 递归法
|
||||||
class Solution {
|
class Solution {
|
||||||
public boolean isSameTree(TreeNode p, TreeNode q) {
|
public boolean isSameTree(TreeNode p, TreeNode q) {
|
||||||
if (p == null && q == null) {
|
if (p == null && q == null) return true;
|
||||||
return true;
|
else if (q == null || p == null) return false;
|
||||||
} else if (q == null || p == null) {
|
else if (q.val != p.val) return false;
|
||||||
return false;
|
return isSameTree(q.left, p.left) && isSameTree(q.right, p.right);
|
||||||
} else if (q.val != p.val) {
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return isSameTree(q.left, p.left) && isSameTree(q.right, p.right);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```java
|
||||||
|
// 迭代法
|
||||||
|
class Solution {
|
||||||
|
public boolean isSameTree(TreeNode p, TreeNode q) {
|
||||||
|
if(p == null && q == null) return true;
|
||||||
|
if(p == null || q == null) return false;
|
||||||
|
Queue<TreeNode> que= new LinkedList<TreeNode>();
|
||||||
|
que.offer(p);
|
||||||
|
que.offer(q);
|
||||||
|
while(!que.isEmpty()){
|
||||||
|
TreeNode leftNode = que.poll();
|
||||||
|
TreeNode rightNode = que.poll();
|
||||||
|
if(leftNode == null && rightNode == null) continue;
|
||||||
|
if(leftNode == null || rightNode== null || leftNode.val != rightNode.val) return false;
|
||||||
|
que.offer(leftNode.left);
|
||||||
|
que.offer(rightNode.left);
|
||||||
|
que.offer(leftNode.right);
|
||||||
|
que.offer(rightNode.right);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
Python:
|
Python:
|
||||||
|
```python
|
||||||
|
# 递归法
|
||||||
|
class Solution:
|
||||||
|
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
|
||||||
|
if not p and not q: return True
|
||||||
|
elif not p or not q: return False
|
||||||
|
elif p.val != q.val: return False
|
||||||
|
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
|
||||||
|
```
|
||||||
|
|
||||||
|
```python
|
||||||
|
# 迭代法
|
||||||
|
class Solution:
|
||||||
|
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
|
||||||
|
if not p and not q: return True
|
||||||
|
if not p or not q: return False
|
||||||
|
que = collections.deque()
|
||||||
|
que.append(p)
|
||||||
|
que.append(q)
|
||||||
|
while que:
|
||||||
|
leftNode = que.popleft()
|
||||||
|
rightNode = que.popleft()
|
||||||
|
if not leftNode and not rightNode: continue
|
||||||
|
if not leftNode or not rightNode or leftNode.val != rightNode.val: return False
|
||||||
|
que.append(leftNode.left)
|
||||||
|
que.append(rightNode.left)
|
||||||
|
que.append(leftNode.right)
|
||||||
|
que.append(rightNode.right)
|
||||||
|
return True
|
||||||
|
```
|
||||||
Go:
|
Go:
|
||||||
|
|
||||||
JavaScript:
|
JavaScript:
|
||||||
|
Reference in New Issue
Block a user