劍指offer之樹的子結構
阿新 • • 發佈:2017-06-03
com tps pid roo true views 輸入 cti right
題目:
樹的子結構
鏈接:
https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?tpId=13&tqId=11170&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
題目描述:
輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)
思路:
分為兩步:
第一步:用HasSubtree 搜索與子樹根節點值相同的點(遞歸查找),如果找到則進行第二步。
第二步:用isSubtree搜索子樹是否是大樹的子樹,
代碼:
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 };*/ 10 class Solution{ 11 public: 12 bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){ 13 boolresult = false; 14 if(pRoot2 == nullptr) 15 return false; 16 if(pRoot1 == nullptr) 17 return false; 18 if(pRoot1->val == pRoot2->val){ 19 result = isSubtree(pRoot1,pRoot2); 20 } 21 if(!result){ 22 result = HasSubtree(pRoot1->left,pRoot2)|| HasSubtree(pRoot1->right, pRoot2);23 } 24 return result; 25 } 26 bool isSubtree(TreeNode* root1, TreeNode* root2){ 27 if(root2 == nullptr) 28 return true; 29 if(root1 == nullptr) 30 return false; 31 if(root1->val != root2->val) 32 return false; 33 else 34 return isSubtree(root1->left,root2->left)&& isSubtree(root1->right,root2->right); 35 } 36 };
劍指offer之樹的子結構