求解答二叉相等判断为何没结果

题目是:判断两颗二叉树是否相等。
以下p1是我的运行结果,p2是我要判断的两颗二叉树。想不通为何没有运行结果呢?请指教谢谢不胜感激

img

img

#include 
#include 
#define OK 1
#define ERROW 0
#define OVERFLOW -1
int flag=1;    //flag判断两棵树是否相等 
typedef struct BiTNode
{char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void xinsert(BiTree &T) //先序 输入 
{char ch;
scanf("%c",&ch);
if (ch=='#')     //#表示空 
T=NULL;
else 
{T=new BiTNode;
T->data=ch;
xinsert(T->lchild);
xinsert(T->rchild);
}
}
 int Judge(BiTree &T1,BiTree &T2)  //第二题 
  {
  if(T1&&T2)   //T1,T2不为空。 
  {if(T1->data!=T2->data||flag==0)  //若字符不相等,flag=0  
    {flag=0;             //只要有一个判断不相等的情况,后面无论怎么判断,flag都为0 
    return 0;
    }
    else 
    {
    Judge(T1->lchild,T2->lchild);  //若字符相等,则递归判断它的左右子树是否相等。 
    Judge (T1->rchild,T2->rchild);
    return OK;
    }
  }
  }
int main()
  {BiTree T;
  BiTree T2;
  printf("请先序输入T二叉树元素,并以'#'表示该节点为空\n");//先序输入第一棵二叉树 
   xinsert(T);
printf("\n请先序输入第T2二叉树元素,并以'#'表示该节点为空\n");//先序输入第二棵二叉树 
   xinsert(T2);
   int x;
   Judge(T,T2);     //调用函数 
   if (flag==0) x=0;//若flag==0,则x=0 
   else x=1; //否则x=1 
   printf("\n第二题:判断T与T2是否相等?(0为否,1为是)\n%d\n",x);//x为0就明不相等,x为1说明相等 
   return 0; 
  }


先序输入函数里,输入语句修改下:

void xinsert(BiTree &T) //先序 输入
{
    char ch;
    scanf(" %c",&ch);  //scanf("%c",&ch); 修改
    if (ch == '#')     //#表示空
        T=NULL;
    else
    {
        T=new BiTNode;
        T->data=ch;
        xinsert(T->lchild);
        xinsert(T->rchild);
    }
}

看不到你的代码,给你写一个代码你看看把

#include <stdbool.h> // 引入bool类型

struct TreeNode {
    int val;
    struct TreeNode* left;
    struct TreeNode* right;
};

bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    if (p == NULL && q == NULL) { // 两个节点都为空,认为相等
        return true;
    }
    if (p == NULL || q == NULL) { // 有一个节点为空,认为不相等
        return false;
    }
    if (p->val != q->val) { // 节点值不相等,认为不相等
        return false;
    }
    // 递归判断左右子树是否相等
    return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}


谢谢!!不得不感叹好神奇啊,怎么一个空格就会如此TAT