15,判断一棵树是不是另一棵树的子结构《剑指offer》
题目:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:
可以递归的寻找到节点值相同的点,进行树是否相等的判断(也用递归)
代码:
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: bool HasSubtree(TreeNode* a, TreeNode* b) { if(!a||!b)return false; //先进行空值处理! if(a->val==b->val&&isEqual(a,b)) return true; //当确定时子结构时才返回true return HasSubtree(a->left,b)||HasSubtree(a->right,b); } bool isEqual(TreeNode* a,TreeNode* b){ if(!b) return true; //先进行空值处理! if(!a) return false; //先进行空值处理! if(a->val!=b->val) return false; return isEqual(a->left,b->left)&&isEqual(a->right,b->right); } };