leetcode_101번 - Symmetric Tree(트리, 귀속, 그리고 반복해서 생각해 내지 못했다)
5409 단어 LeetCode
Symmetric Tree
Total Accepted: 52678 Total Submissions: 166910 My Submissions
Question
Solution
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
1
/ \
2 2
/ \ / \
3 4 4 3
But the following is not:
1
/ \
2 2
\ \
3 3
Note:Bonus points if you could solve it both recursively and iteratively.
confused what
"{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ. Hide Tags
Tree Depth-first Search
Have you met this question in a real interview?
Yes
No
Discuss
이 문제는 뿌리 결점의 두 좌우 나무를 각각 차례대로 훑어본 다음에 얻은 결과를 수조에 저장하고 그 다음에 비교하여 서로 같은지 아닌지를 보려는 것이다. 그러나 이렇게 하면
질문이 하나 있습니다. 하나, 둘, 둘, 셋, 셋, 셋. 이런 상황에서 그는 비대칭적이지만 내 방식대로라면 똑같습니다.
#include<iostream>
#include<stack>
#include <vector>
using namespace std;
// Definition for binary tree
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
//
void first_search(TreeNode* root,vector<int>& temp)
{
if(root==NULL)
return;
temp.push_back(root->val);
if(root->left!=NULL)
first_search(root->left,temp);
else
temp.push_back('#');
if(root->right!=NULL)
first_search(root->right,temp);
else
temp.push_back('#');
return;
}
bool isSymmetric(TreeNode *root) {
if(root==NULL)
return 1;
vector<int> temp1,temp2;
first_search(root->left,temp1);
first_search(root->right,temp2);
if(temp1==temp2)
return 1;
else
return 0;
}
int main()
{
}
귀속적인 방법으로 하여 양쪽의 두 좌우 나무가 대칭적인지 판단한다. 즉, 왼쪽 나무의 왼쪽 나무가 오른쪽 나무의 오른쪽 나무인지, 왼쪽 나무의 오른쪽 나무가 오른쪽 나무의 왼쪽 나무인지를 판단한 다음에 적당한 귀속 종지 조건을 선택한다. 즉, 두 좌우 나무의 서쪽에 결점이 없거나 양쪽에 각각 하나의 노드(귀속), 네 개의 결점(이어 귀속)이 있다.또는 다른 상황(귀환), 그리고 주의해야 할 것은 마지막으로 돌아올 때 이 두 값이 같은지 아닌지를 판단하는 것이다
다음은 AC 코드입니다.
#include<iostream>
//#include<stack>
#include<queue>
#include <vector>
using namespace std;
// Definition for binary tree
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
bool ifduicheng(TreeNode* left_root,TreeNode* right_root)
{
if(left_root->left==NULL&&left_root->right==NULL&&right_root->left==NULL&&right_root->right==NULL)
{
if(left_root->val==right_root->val)
return true;
else
return false;
}
else if(left_root->left!=NULL&&left_root->right!=NULL&&right_root->left!=NULL&&right_root->right!=NULL)
{
if(ifduicheng(left_root->left,right_root->right)&&ifduicheng(left_root->right,right_root->left))
{
if(left_root->val==right_root->val)
return true;
else
return false;
}
else
return false;
}
else if(left_root->left!=NULL&&left_root->right==NULL&&right_root->left==NULL&&right_root->right!=NULL)
{
if(ifduicheng(left_root->left,right_root->right))
{
if(left_root->val==right_root->val)
return true;
else
return false;
}
else
return false;
}
else if(left_root->left==NULL&&left_root->right!=NULL&&right_root->left!=NULL&&right_root->right==NULL)
{
if(ifduicheng(left_root->right,right_root->left))
{
if(left_root->val==right_root->val)
return true;
else
return false;
}
else
return false;
}
else
return false;
}
bool isSymmetric(TreeNode *root)
{
if(root==NULL)
return true;
if(root->left==NULL&&root->right==NULL)
return true;
if((root->left==NULL&&root->right!=NULL)||(root->left!=NULL&&root->right==NULL))
return false;
if(root->left!=NULL&&root->right!=NULL)
return ifduicheng(root->left,root->right);
}
int main()
{
TreeNode* root;
root=(TreeNode*)malloc(sizeof(TreeNode));
root->val=1;
root->left=(TreeNode*)malloc(sizeof(TreeNode));
root->left->val=2;
root->right=(TreeNode*)malloc(sizeof(TreeNode));
root->right->val=2;
root->left->left=NULL;
root->left->right=NULL;
root->right->left=NULL;
root->right->right=NULL;
cout<<isSymmetric(root)<<endl;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.