101.[Leetcode]Symmetric Tree
9731 단어 LeetCode
제목:
두 갈래 나무가 대칭인지 아닌지를 판단하다
나의 생각:
귀속
그러나 일반적인 그런 귀환이 아닌지, 그런 귀환은 생각해 낼 수 없다. 왜냐하면 서브 노드가 대칭인지 부 노드인지는 확실히 아무런 관계가 없다고 생각하기 때문이다.
나는 한 노드의 좌우 노드를 옮겨다니며 창고에 기록하고, 동시에 오른쪽 왼쪽 (순서가 상반됨) 을 옮겨다니며 창고에 기록한다
그 다음에 두 창고를 비교해 즉시노드가 비어 있으면 -1로 설정해야 하며, 더 이상 val이 나타나지 않는 값이 매우 중요하다.
주의: 한계 조건, 뿌리가 비어 있을 때true로 되돌아오기;
// , ,
class Solution {
public:
bool isSymmetric(TreeNode* root) {
//
if(root == NULL) return true;
stack<int> vals_1,vals_2;
push_val(root->left,vals_1,1);
push_val(root->right,vals_2,0);
while(!vals_1.empty()){
if(vals_2.empty()) return false; //vals_1 , vals_2 ,
if(vals_1.top() != vals_2.top()) return false; // ,false
vals_1.pop();
vals_2.pop();
}
if(!vals_2.empty()) return false; //
return true;
}
void push_val(TreeNode* node,stack<int> &vals,int direction){ // , node val
if(node == NULL) {
vals.push(-1); // , ,
return;
}
vals.push(node->val);
if(direction == 1) {
push_val(node->left,vals,1);
push_val(node->right,vals,1);
} else {
push_val(node->right,vals,0);
push_val(node->left,vals,0);
}
}
};
공식 귀환도 한탄할 만하다.
분석이 옳다. 두 개의 나무 거울은 단지 두 개의 원소일 뿐이다.이 두 개의 뿌리 노드는 같다.노드 1의 왼쪽 노드와 노드 2의 오른쪽 노드 거울, 노드 1의 오른쪽 노드와 노드 2의 왼쪽 노드 거울,
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);
}
두 번째 방법은 당연히 순환이다. 두 갈래 나무의 순서, 중순서, 후순서가 어떻게 순환으로 실현되는지 이 링크에서 설명하는 것은 매우 명확하다. 복습해 보자.
class Solution {
public:
bool isSymmetric(TreeNode* root) {
//
if(root == NULL) return true; //root
if(root->left == NULL && root->right == NULL) return true; //root
if(!(root->left != NULL && root->right != NULL)) return false; //root
stack<TreeNode*> nodes; //
nodes.push(root->left);
nodes.push(root->right);
while(!nodes.empty()){
//v
TreeNode* node1 = nodes.top();
nodes.pop();
TreeNode* node2 = nodes.top();
nodes.pop();
if(node1->val != node2->val) return false; //judge
// left,right
if((node1->left == NULL && node2->right != NULL) || (node1->left != NULL && node2->right == NULL))
return false;
if(node1->left != NULL && node2->right != NULL) {
nodes.push(node1->left);
nodes.push(node2->right);
}
// right,left
if((node2->left == NULL && node1->right != NULL) || (node2->left != NULL && node1->right == NULL))
return false;
if(node2->left != NULL && node1->right != NULL) {
nodes.push(node2->left);
nodes.push(node1->right);
}
}
return true;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)이 문제의 공식 난이도는 Medium으로 좋아요 1296, 반대 505, 통과율 35.4%를 눌렀다.각 항목의 지표로 말하자면 보기에는 약간 규범에 맞는 것 같지만, 실제로도 확실히 그렇다.이 문제의 해법과 의도는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.