转载于http://www.linuxidc.com/Linux/2015-01/111643.htm
1、二叉树定义
typedef struct BTreeNodeElement_t_ {
void *data;
} BTreeNodeElement_t;
typedef struct BTreeNode_t_ {
BTreeNodeElement_t *m_pElemt;
struct BTreeNode_t_ *m_pLeft;
struct BTreeNode_t_ *m_pRight;
} BTreeNode_t;
2、递归方式比较两个二叉树结构是否相同,不涉及存储的数据
如果两个二叉树pRoot都为空树,则自然相同,返回true;
如果两个二叉树pRoot一个为空树,另一个不为空树,则不相同,返回false;
如果两个二叉树都不为空树,则需要分别比较左右子树后,根据比较结果共同判定,只要有一个为false,则返回false。
bool BTreeCompare( BTreeNode_t *pRoot1, BTreeNode_t *pRoot2)
{
//如果都为空树,则相同
if( pRoot1 == NULL && pRoot2 == NULL )
return true;
//如果一个为空,一个不为空,则不相同
if( ( pRoot1 != NULL && pRoot2 == NULL ) ||
( pRoot1 == NULL && pRoot2 != NULL ) )
return false;
//如果都不为空,则 需要比较左右子树后,再根据比较结果断定
bool leftCmp = BTreeCompare( pRoot1->m_pLeft, pRoot2->m_pLeft);
bool rightCmp = BTreeCompare( pRoot1->m_pRight, pRoot2->m_pRight);
return ( leftCmp && rightCmp );
}