迭代算法:一个二叉树相等==根结点相同+ 左子树相同+右子树相同
1.1
获取结构体成员
通过结构体指针可以获取结构体成员,一般形式为:
(pointer).memberName
或者:
pointer->memberName
第一种写法中,.的优先级高于,(pointer)两边的括号不能少。如果去掉括号写作pointer.memberName,那么就等效于*(pointer.memberName),这样意义就完全不对了。
第二种写法中,**->**是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途
2:算法#include3:运行结果:#include #define TRUE 1 #define FALSE 0 #define ERROR 0 #define BOOL int typedef int TElemType; typedef struct BiTNode { TElemType data; struct BiTNode *lchild, *rchild; }BiTNode, *BiTree; BOOL SimilarTree(BiTree T1,BiTree T2) { if(T1==NULL&&T2==NULL) return TRUE; // 如果两个均为空树,退出迭代,相等 if(T1==NULL||T2==NULL) return FALSE; //如果两个只有一个为空树,则不相等 if(T1->data!=T2->data) return FALSE; //如果此结点数据不相等则,退出迭代 return SimilarTree(T1->lchild,T2->lchild)&& SimilarTree(T1->rchild,T2->rchild); } void CreateBiTree(BiTree *T){ *T=(BiTNode*)malloc(sizeof(BiTNode)); (*T)->data=1; (*T)->lchild=(BiTNode*)malloc(sizeof(BiTNode)); (*T)->rchild=(BiTNode*)malloc(sizeof(BiTNode)); (*T)->lchild->data=2; (*T)->lchild->lchild=(BiTNode*)malloc(sizeof(BiTNode)); (*T)->lchild->rchild=(BiTNode*)malloc(sizeof(BiTNode)); (*T)->lchild->rchild->data=5; (*T)->lchild->rchild->lchild=NULL; (*T)->lchild->rchild->rchild=NULL; (*T)->rchild->data=3; (*T)->rchild->lchild=(BiTNode*)malloc(sizeof(BiTNode)); (*T)->rchild->lchild->data=6; (*T)->rchild->lchild->lchild=NULL; (*T)->rchild->lchild->rchild=NULL; (*T)->rchild->rchild=(BiTNode*)malloc(sizeof(BiTNode)); (*T)->rchild->rchild->data=7; (*T)->rchild->rchild->lchild=NULL; (*T)->rchild->rchild->rchild=NULL; (*T)->lchild->lchild->data=4; (*T)->lchild->lchild->lchild=NULL; (*T)->lchild->lchild->rchild=NULL; } int main() { BiTree T1, T2; CreateBiTree(&T1); CreateBiTree(&T2); printf("%d",SimilarTree(T1,T2)); }



