借鉴高赞
#include<stdio.h>
#include<stdlib.h>
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
void create(TreeNode* &BT)
{
char c;
scanf("%c", &c);
if(c!='#'){
BT=(TreeNode*)malloc(sizeof(TreeNode));
BT->val=c-'0';
create(BT->left);
create(BT->right);
}else{
BT=NULL;
}
}
int xlevel=-2, ylevel=-2;
int xpaval, ypaval;
int dfs(struct TreeNode* root, int x, int y, int level, int parentval){
if(root==NULL) return 0;
if(root->val==x){
xlevel = level;
xpaval = parentval;
}else if(root->val==y){
ylevel = level;
ypaval = parentval;
}else{
dfs(root->left, x, y, level+1, root->val);
dfs(root->right,x, y, level+1, root->val);
}
return 1;
}
bool isCousins(struct TreeNode* root, int x, int y){
dfs(root->left, x, y, 1, root->val);
dfs(root->right,x, y, 1, root->val);
if(xlevel==-2||ylevel==-2) return false;
return (xlevel==ylevel)&&(xpaval!=ypaval);
}
int main()
{
TreeNode* Bt;
create(Bt);
bool b=isCousins(Bt, 2,3);
printf("%d", b);
return 0;
}