树的子结构
输入2棵二叉树A和B,判断B是不是A的子结构。
解决步骤分为2步:第一步找到树A中与树B根节点的值相同的节点R,第二部判断树A中以节点R为根节点的子树是否包含与树B一样的结构。
采用递归方法可以得到如下代码:
struct BinaryTreeNode { int value; BinaryTreeNode* p_left; BinaryTreeNode* p_right; }; bool DoesTree1HaveTree2(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2) { if( pRoot2 == NULL ) return true; if( pRoot1 == NULL) return false; if( pRoot1->value != pRoot2->value ) return false; return DoesTree1HaveTree2(pRoot1->p_left,pRoot2->p_left) && DoesTree1HaveTree2(pRoot1->p_right,pRoot2->p_right); } bool HasSunTree(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2) { bool result = false; if( pRoot1 !=NULL && pRoot2 != NULL) { if(pRoot1->value == pRoot2->value ) result = DoesTree1HaveTree2(pRoot1,pRoot2); if(!result) result = HasSunTree(pRoot1->p_left,pRoot2); if(!result) result = HasSunTree(pRoot1->p_right,pRoot2); } return result; }
代码比较简洁易懂就不做注释了

浙公网安备 33010602011771号