劍指offer66題--Java實現,c++實現和python實現 17.樹的子結構
阿新 • • 發佈:2018-12-29
題目描述
輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)
C++
/* 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) { if (pRoot1 == nullptr || pRoot2 == nullptr) return false; //直接返回錯誤 return isTheSameTree(pRoot1, pRoot2) || HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2); } bool isTheSameTree(TreeNode* pRoot1, TreeNode* pRoot2) { if (pRoot2 == nullptr) return true; if (pRoot1 == nullptr && pRoot2 != nullptr) return false; return pRoot1->val == pRoot2->val && isTheSameTree(pRoot1->left, pRoot2->left) && isTheSameTree(pRoot1->right, pRoot2->right); } };
Java
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { boolean result = false ; if(root1 != null && root2 != null) { if(root1.val == root2.val) result = isSubTree(root1,root2); if(result == false) result = HasSubtree(root1.left,root2); if(result == false) result = HasSubtree(root1.right,root2); } return result; } private boolean isSubTree(TreeNode root1,TreeNode root2) { if(root2 == null) return true; if(root1 == null) return false; if(root1.val != root2.val) return false; return isSubTree(root1.left,root2.left)&&isSubTree(root1.right,root2.right); } }
python
# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def HasSubtree(self, pRoot1, pRoot2): # write code here if pRoot1 == None or pRoot2 == None: return False return self.isSubtree(pRoot1, pRoot2) def isSubtree(self, p1, p2): if p2 == None: return True if p1 == None: return p1 == p2 res = False if p1.val == p2.val: res = self.isSubtree(p1.left, p2.left) and self.isSubtree(p1.right, p2.right) return res or self.isSubtree(p1.left, p2) or self.isSubtree(p1.right, p2)