比较两棵可旋转二叉树是否相等
二叉树左右子结点可旋转是指:可以把二叉树的左结点旋转成为右子树,把右子树的结点旋转成为左子树。这个与判断两棵二叉树的逻辑相同,只是要交叉判断。
算法思路:在文章http://www.cnblogs.com/houjun/p/4860680.html的基础上,把判断代码改成如下:
1 if(T1->data == T2->data) //如果根节点相等 2 return (isEqual(T1->lc,T2->lc) && isEqual(T1->rc,T2->rc)) 3 ||(isEqual(T1->lc,T2->rc) && isEqual(T1->rc,T2->lc));
完整算法为:
1 //二叉树节点结构体 2 struct BinaryNode 3 { 4 int data; 5 BinaryNode * lc; 6 BinaryNode * rc; 7 }*BTree; 8 9 //判断二叉树是否相等的函数 10 11 bool isEqual(BTree T1,BTree T2) 12 { 13 if(T1 == NULL && T2 == NULL) 14 return true;//都为空,相等。 15 if(!T1||!T2) //由于上面的判断不成立,则T1,T2至少有一个不为空 16 return false;//一个空,一个不空,不相等 17 if(T1->data == T2->data) //如果根节点相等 18 return (isEqual(T1->lc,T2->lc) && isEqual(T1->rc,T2->rc))//判断左右子树是否都相等 19 ||(isEqual(T1->lc,T2->rc) && isEqual(T1->rc,T2->lc)); 20 else 21 return false; 22 }
手与大脑的距离决定了理想与现实的相似度