题目详情 题目分析:
注意释放空间,因为指针申请了空间就会一直在内存里,除非手动释放或程序结束不能直接访问未初始化的指针,这样的指针叫“野指针”,"野指针"不是NULL指针,是指向“垃圾”内存的指针。“野指针”是很危险,if语句对它不起作用。 #include <cstdio> struct Tree { int value; Tree *Left; Tree *Right; }; int NodeNum, TreeNum, NodeValue; Tree *insert(Tree *t, int NodeValue) { if (t == NULL){ t = new Tree; t->value = NodeValue; t->Left = t->Right = NULL; } else { if (NodeValue > t->value) t->Right = insert(t->Right, NodeValue); else t->Left = insert(t->Left, NodeValue); } return t; } Tree *BuildTree(int NodeNum) { Tree *t = NULL;//不初始化为NULL,t将一直都是野指针,那么第11行if访问就会出现段错误 for (int i = 1; i <= NodeNum; i++) { scanf("%d", &NodeValue); t = insert(t, NodeValue); } return t; } int Judge(Tree *t1, Tree *t2) { if (t1 == NULL && t2 == NULL) return 1; if ((t1 != NULL && t2 == NULL) || (t1 == NULL && t2 != NULL) || (t1->value != t2->value)) return 0; else return Judge(t1->Left, t2->Left) && Judge(t1->Right, t2->Right); } void FreeTree(Tree *&t) { if (t->Left != NULL) FreeTree(t->Left); if (t->Right != NULL) FreeTree(t->Right); delete t;//与new搭配使用 } int main() { scanf("%d", &NodeNum); while (NodeNum) { scanf("%d", &TreeNum); Tree *t1 = BuildTree(NodeNum); while (TreeNum--) { Tree *t2 = BuildTree(NodeNum); puts(Judge(t1, t2) ? "Yes" : "No"); FreeTree(t2); } FreeTree(t1); scanf("%d", &NodeNum); } }