LeetCode 101. Symmetric Tree 대칭 두 갈래 나무
제목:
두 갈래 나무를 정해서 거울이 대칭적인지 확인하세요.
예를 들어 두 갈래 나무
[1,2,2,3,4,4,3]
는 대칭적이다. 1
/ \
2 2
/ \ / \
3 4 4 3
그러나 아래의 이것
[1,2,2,null,3,null,3]
은 거울의 대칭이 아니다. 1
/ \
2 2
\ \
3 3
설명:
만약 네가 귀속과 교체 두 가지 방법을 운용하여 이 문제를 해결할 수 있다면, 매우 가산점이 있을 것이다.
문제 해결 방법:
이 나무에 대해 왼쪽 트리에 대한 우선 접근과 오른쪽 트리에 대한 우선 접근을 동시에 진행하여 현재 접근한 두 노드가 동일한지 판단합니다.
코드 구현:
귀속:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
TreeNode p = root;
TreeNode q = root;
return helper(p, q);
}
private boolean helper(TreeNode p, TreeNode q) {
// null ,
if (p == null || q == null) return p == q;
return (p.val == q.val) && helper(p.left, q.right) && helper(p.right, q.left);
}
}
교체:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
Stack<TreeNode> pStack = new Stack<TreeNode>();
Stack<TreeNode> qStack = new Stack<TreeNode>();
TreeNode p = root;
TreeNode q = root;
while (p != null && q != null) {
// , false
if (!isEqual(p, q)) return false;
if (p.right != null) pStack.push(p.right);
if (q.left != null) qStack.push(q.left);
p = p.left;
q = q.right;
if (p == null && q == null && !pStack.isEmpty() && !qStack.isEmpty()) {
p = pStack.pop();
q = qStack.pop();
}
}
return p == q;
}
private boolean isEqual(TreeNode p, TreeNode q) {
boolean children = true;
if (p == null || q == null) return p == q;
if (p.left == null || q.right == null) children = children && (p.left == q.right);
if (p.right == null || q.left == null) children = children && (p.right == q.left);
return (p.val == q.val) && children;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode 문제풀이 노트 113.경로 총 II경로 총 II 제목 요구 사항 문제풀이 두 갈래 나무와 목표와 뿌리 노드에서 잎 노드까지의 모든 경로를 찾는 것은 목표와 같은 경로입니다. 설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다. 예: 다음과 같은 두 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.