(剑指Offer)面试题18:树的子结构
生活随笔
收集整理的這篇文章主要介紹了
(剑指Offer)面试题18:树的子结构
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
輸入兩棵二叉樹A和B,判斷B是不是A的子結構。
二叉樹結構定義如下:
struct TreeNode{int val;TreeNode* left;TreeNode* right; };思路:
判斷二叉樹B是否為二叉樹A的子樹:
首先判斷二叉樹A的根節點值是否等于二叉樹B的根節點值;
如果是,則繼續往下遍歷,判斷二叉樹A的左子節點和二叉樹B的左子結點以及二叉樹A的右子節點和二叉樹B的右子節點是否都相等,直到葉子節點;(遞歸)
return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right);如果不是,則判斷二叉樹B是否為二叉樹A左子樹的子樹或者二叉樹B是否為二叉樹A右子樹的子樹;(遞歸)
result=HasSubtree(pRoot1->left,pRoot2); result=HasSubtree(pRoot1->right,pRoot2);代碼:
struct TreeNode{int val;TreeNode* left;TreeNode* right; };bool IsSubtree(TreeNode* pRoot1,TreeNode* pRoot2){if(pRoot2==NULL)return true;if(pRoot1==NULL)return false;if(pRoot1->val!=pRoot2->val)return false;return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right); }bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){bool result=false;if(pRoot1!=NULL && pRoot2!=NULL){if(pRoot1->val==pRoot2->val)result=IsSubtree(pRoot1,pRoot2);if(!result)result=HasSubtree(pRoot1->left,pRoot2);if(!result)result=HasSubtree(pRoot1->right,pRoot2);}return result; }在線測試OJ:
http://www.nowcoder.com/books/coding-interviews/6e196c44c7004d15b1610b9afca8bd88?rp=1
AC代碼:
class Solution { public:bool IsSubtree(TreeNode* pRoot1,TreeNode* pRoot2){if(pRoot2==NULL)return true;if(pRoot1==NULL)return false;if(pRoot1->val!=pRoot2->val)return false;return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right);}bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){bool result=false;if(pRoot1!=NULL && pRoot2!=NULL){if(pRoot1->val==pRoot2->val)result=IsSubtree(pRoot1,pRoot2);if(!result)result=HasSubtree(pRoot1->left,pRoot2);if(!result)result=HasSubtree(pRoot1->right,pRoot2);}return result;} };
總結
以上是生活随笔為你收集整理的(剑指Offer)面试题18:树的子结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ1012|JSOI最大数maxn
- 下一篇: 《JavaScript设计模式与开发实践