【二叉树】树的子结构/判断一个节点是否在二叉树中
2017-07-27 15:40
453 查看
树的子结构
问题分析输入两棵二叉树A和B,判断B是不是A的子结构
思路:
1、在树A中找到和B根节点值一样的节点R
2、再判断树A中以R节点为根节点的子树是不是包含和树B一样的结构。
代码实现
//步骤1,找一样的节点 bool HasSubTree(TreeNode* pRoot1, TreeNode * pRoot2) { bool res = false; if (pRoot1 != NULL && pRoot2 != NULL) { if (pRoot1->val == pRoot2->val) res = DoesTree1HaveTree2(pRoot1, pRoot2); //以该节点为根节点的结构不是子树结构 if (!res) res = HasSubTree(pRoot1->left, pRoot2); if (!res) res = HasSubTree(pRoot1->right, pRoot2); } return res; } //步骤2:在A中找到与B根节点一样的点R,判断是否有一样的结构 //递归的思路来考虑,如果两个根节点相等的话,则判断他们得左右子树是否相等, //直到到达其中一个数的叶节点 bool DoesTree1HaveTree2(TreeNode* pRoot1, TreeNode * pRoot2) { if (pRoot2 == NULL)//如果B结构到达叶子节点,说明匹配 return true; if (pRoot1 == NULL)//如果A中到达叶子结点,但是B没有到达叶子节点,说明不匹配 return false; if (pRoot1->val != pRoot2->val) return false; return DoesTree1HaveTree2(pRoot1->left, pRoot2->left) && DoesTree1HaveTree2(pRoot1->right, pRoot2->right); }
变形,判断两个树的结构是否相等
分析:其实这个问题与上一个问题类似,但是相对容易一些。只是判断两个数的结构是否相等,不考虑到树的节点内容。
bool StructureCmp(Node *pRoot1,Node *pRoot2) { //两个根节点都为空,返回真 if(pRoot1 == NULL && pRoot2 == NULL) return true; if(pRoot1 == NULL || pRoot2 == NULL) return false; bool left = StructureCmp(pRoot1->left,pRoot2->left); bool right = StructureCmp(pRoot2->right,pRoot2->right); return (left&&right); }
判断一个节点是否在二叉树中
思路:递归的方法,判断根节,然后 找左子树,找右子树bool IsInTree(Node* pRoot,Node* find) { if(pRoot == NULL || find == NULL) return false; if(pRoot == find) return true; //不是根节点,找左找右 if(IsInTree(pRoot->left,find)) return true; return IsInTree(pRoot->right,find); }
相关文章推荐
- 判断一个节点是否在一棵二叉树中
- 二叉树--判断一个节点是否在一棵二叉树中。
- 判断一个节点是否在一棵二叉树中
- 面试题:判断一个节点是否在一棵二叉树中
- 【判断一个节点是否在一棵二叉树中】/【判断一颗二叉树是是否是另一颗树的子树】
- 求两个节点的最近公共祖先多种解法&&判断一个节点是否在二叉树中
- 有一个二叉树,现在怀疑它有一个结点有2个父节点,请写出一个函数来判断该二叉树是否存在一个节点含有2个父节点。如果存在,返回true,否则返回false。
- 【面试题】剑指offer18--判断一个二叉树是否为另一个二叉树的子结构
- Java代码 给出一个二叉树和一个数,判断该二叉树是否存在一个从根节点到叶节点的和与给出的数相同
- 2个二叉树A、B,树的每个节点上都有一个整数值。如何判断A与B是否其中一个是另一个的子树?
- 判断一个节点是否在一棵二叉树中&判断一颗二叉树是是否是另一颗树的子树
- 判断一个节点是否在一棵二叉树中&&判断一颗二叉树是是否是另一颗树的子树
- 判断一个节点是否在一棵二叉树中
- day14之判断一个节点是否在一棵二叉树中+判断一颗二叉树是是否是另一颗树的子树
- 有一个二叉树,现在怀疑它有一个结点有2个父节点,请写出一个函数来判断该二叉树是否存在一个节点含有2个父节点。如果存在,返回true,否则返回false。
- 用C语言判断一个二叉树是否为另一个的子结构
- 判断一个节点是否在一棵二叉树中和判断一颗二叉树是否是另一颗树的子树——题集(十二)
- 每日一题之判断一个节点是否在一棵二叉树中
- 判断一个节点是否在二叉树中,判断tree2是否为tree1的子树
- 判断一个二叉树是否为对称二叉树