【算法题目】树的子结构
题目来源:《剑指offer》面试题18
输入两颗二叉树A和B,判断B是不是A的子结构。二叉树的节点定义如下:
struct BinaryTreeNode { int value; BinaryTreeNode* left; BinaryTreeNode* right; };
要查找A中是否存在和树B结构一样的子树,我们可以分为两步:第一步在树A中找到和B的根节点的值一样的节点R,然后再判断树A中以R为根节点的子树是不是包含和树B一样的结构。
bool HasSubTree(BinaryTreeNode* root1, BinaryTreeNode* root2) { if (root1 == NULL) return false; bool flag = false; if (root1->value == root2->value) flag = DoesTree1HasTree2(root1, root2); if (!flag) flag = HasSubTree(root1->left, root2); if (!flag) flag = HasSubTree(root1->left, root2); return flag; } bool DoesTree1HasTree2(BinaryTreeNode* root1, BinaryTreeNode* root2) { if (root2 == NULL) return true; if (root1 == NULL) return false; if (root1->val != root2->val) return false; return DoesTree1HasTree2(root1->left, root2) && DoesTree1HasTree2(root1->right, root2); }