输入两棵二叉树A,B,判断B是不是A的子结构。
2017-07-19 13:52
148 查看
要查找树A中是否存在和树B结构一样的子树。我们可以分为两步:
第一步在树A中找到和B的根节点一样的值一样的结点R,第二步在判断树A中以R为根节点的子树是不是包含和树B一样的结构。
树的结点:
第一步代码:
判断树A中以R为根节点的子树是不是包含和树B一样的结构。
第二步代码:
第一步在树A中找到和B的根节点一样的值一样的结点R,第二步在判断树A中以R为根节点的子树是不是包含和树B一样的结构。
树的结点:
struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }
第一步代码:
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool result = false; if (pRoot1 != NULL&&pRoot2 != NULL) { if (pRoot1->val == pRoot2->val) { //找到相同结点后判断是否含有相同结构 result = DoesTree1HaveTree2(pRoot1, pRoot2); } if (!result)//在左子树中查找相同结点 { result = HasSubtree(pRoot1->left, pRoot2); } if (!result)//在右子树中找相同结点 { result = HasSubtree(pRoot1->right, pRoot2); } } return result; }
判断树A中以R为根节点的子树是不是包含和树B一样的结构。
第二步代码:
//递归判断结构是否相同,直到将pRoot2所有结点完全判断 bool DoesTree1HaveTree2(TreeNode*pRoot1, TreeNode*pRoot2){ if (pRoot2 == NULL){ return true; } if (pRoot1 == NULL){ return false; } if (pRoot1->val != pRoot2->val){ return false; } return DoesTree1HaveTree2(pRoot1->left, pRoot2->left) && DoesTree1HaveTree2(pRoot1->right, pRoot2->right); }
相关文章推荐
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 剑指offer 18---输入两棵二叉树A和B,判断B是不是A的子结构
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构
- 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构(c++实现)
- 剑指offer:输入两棵二叉树A,B,判断B是不是A的子结构(Python)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 剑指offer-输入两棵二叉树A,B,判断B是不是A的子结构(ps:我们约定空树不是任意一个树的子结构)
- java实现输入两棵二叉树A,B,判断B是不是A的子结构
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 15.输入两棵二叉树A,B,判断B是不是A的子结构
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 第6天 输入两棵二叉树A和B,判断B是不是A的子结构。
- 题目:输入两棵二叉树A和B,判断B是不是A的子结构。
- 输入两颗二叉树A,B,判断B是不是A的子结构