树的子结构
原题:
输入两棵二叉树A,B,判断B是不是A的子结构。
我们规定空树不是任何树的子结构。
样例
树A: 树B:
8 8
/ \ / \
8 7 9 2
/ \
9 2
/ \
4 7
思想:
在一个树中查找是否存在另一棵树子树可以分为两个步骤:
第一步:遍历整棵树,在树A中找到与树B根结点相同的结点Node。
第二步:遍历以Node为根的子树,看是否与树B相同。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool hasSubtree(TreeNode* A, TreeNode* B) {
if(A == NULL || B == NULL){
return false;
}
bool result = false;
//如果两个树的根结点相同,判断其子树是否相同
if(A->val == B->val) {
result = isSame(A , B);
}
//如果两个树的根结点不同,就继续遍历树A的左右子树。
if (result == false){
result = hasSubtree(A->left , B) || hasSubtree(A->right ,B);
}
return result;
}
bool isSame(TreeNode *A,TreeNode *B){
//如果B为空则说明两个树相同
if(B == NULL) return true;
//如果A为空,但是B不为空,说明两棵树不相等
if(A == NULL) return false;
//如果A等于B,则继续遍历两颗树
if(A->val == B->val) return isSame(A->left , B->left) && isSame(A->right , B->right);
//如果A和B不相等,则返回false
return false;
}
};

浙公网安备 33010602011771号