101. Symmetric Tree
Дан корень бинарного дерева. Проверьте, является ли это 木 зеркальным отражением самого себя (то есть симметричным относительно своего центра).
例:
Input: root = [1,2,2,3,4,4,3]
Output: true
C# 解法
照合済み/オリジナルpublic class Solution {
public bool IsSymmetric(TreeNode root) {
return IsMirror(root, root);
}
public bool IsMirror(TreeNode t1, TreeNode t2) {
if (t1 == null && t2 == null)
return true;
if (t1 == null || t2 == null)
return false;
return (t1.val == t2.val) && IsMirror(t1.right, t2.left) &&
IsMirror(t1.left, t2.right);
}
}
C++ 解法
自動ドラフト、提出前に確認#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public bool IsSymmetric(TreeNode root) {
return IsMirror(root, root);
}
public bool IsMirror(TreeNode t1, TreeNode t2) {
if (t1 == null && t2 == null)
return true;
if (t1 == null || t2 == null)
return false;
return (t1.val == t2.val) && IsMirror(t1.right, t2.left) &&
IsMirror(t1.left, t2.right);
}
}
Java 解法
照合済み/オリジナルclass Solution {
public boolean isSymmetric(TreeNode root) {
return isMirror(root, root);
}
public boolean isMirror(TreeNode t1, TreeNode t2) {
if (t1 == null && t2 == null) return true;
if (t1 == null || t2 == null) return false;
return (
(t1.val == t2.val) &&
isMirror(t1.right, t2.left) &&
isMirror(t1.left, t2.right)
);
}
}
JavaScript 解法
照合済み/オリジナルvar isSymmetric = function (root) {
return isMirror(root, root);
};
var isMirror = function (t1, t2) {
if (!t1 && !t2) return true;
if (!t1 || !t2) return false;
return (
t1.val === t2.val &&
isMirror(t1.right, t2.left) &&
isMirror(t1.left, t2.right)
);
};
Python 解法
照合済み/オリジナルclass Solution:
def isSymmetric(self, root):
return self.isMirror(root, root)
def isMirror(self, t1, t2):
if t1 is None and t2 is None:
return True
if t1 is None or t2 is None:
return False
return (
(t1.val == t2.val)
and self.isMirror(t1.right, t2.left)
and self.isMirror(t1.left, t2.right)
)
Go 解法
照合済み/オリジナルfunc isSymmetric(root *TreeNode) bool {
return isMirror(root, root)
}
func isMirror(t1 *TreeNode, t2 *TreeNode) bool {
if t1 == nil && t2 == nil {
return true
}
if t1 == nil || t2 == nil {
return false
}
return (t1.Val == t2.Val) &&
isMirror(t1.Right, t2.Left) &&
isMirror(t1.Left, t2.Right)
}
Algorithm
1️⃣
木 симметрично, если левое под木 является зеркальным отражением правого поддерева.
2️⃣
Следовательно, вопрос заключается в том, когда два дерева являются зеркальным отражением друг друга?
Два дерева являются зеркальным отражением друг друга, если:
- Их корни имеют одинаковое значение.
- Правое под木 каждого дерева является зеркальным отражением левого поддерева другого дерева.
3️⃣
Это похоже на человека, смотрящего в зеркало. Отражение в зеркале имеет ту же голову, но правая рука отражения соответствует левой руке настоящего человека и наоборот.
Вышеописанное 解説 естественным образом превращается в рекурсивную функцию.
😎
Vacancies for this task
有効な求人 with overlapping task tags are 表示.