您的位置:首页 > 其它

比较两个二叉树是否相同

2016-03-05 15:56 351 查看
转载于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 );
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: