本文共 1146 字,大约阅读时间需要 3 分钟。
Solution1:
此题答案是抄的书上的,要记忆并熟练运用关于二叉树的递归思想!!!/*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* 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; } //判断子树结构是否一致 bool DoesTree1HaveTree2(TreeNode* pRoot1, TreeNode* pRoot2){ if(pRoot2 == NULL) //已经到达树2的根结点,返回true return true; if(pRoot1 == NULL) //已经到了树1的根结点,但还未到达树2的根结点,返回false return false; if(pRoot1->val != pRoot2->val) //值不相同,则返回false return false; //递归判断 return DoesTree1HaveTree2(pRoot1->left, pRoot2->left) && DoesTree1HaveTree2(pRoot1->right, pRoot2->right); }};
转载地址:http://zxhdb.baihongyu.com/