17 树的子结构

 1  2 //题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)/*
 3 struct TreeNode 
 4 {
 5     int val;
 6     struct TreeNode *left;
 7     struct TreeNode *right;
 8     TreeNode(int x) :val(x), left(NULL), right(NULL) 
 9     {
10     }
11 };
12 //思想:若从树的根节点开始比较,相等则返回结果;
两个树的根节点不相等,则从第一个树的左结点开始;
两个树的根节点不相等且左结点也不相等,则从第一个树的右结点开始.
13 class Solution 14 { 15 public: 16 bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) 17 { 18 bool result = false; 19 if (pRoot1 != NULL && pRoot2 != NULL) 20 { 21 //判断树2是否是树1的子树,从根节点开始 22 if (pRoot1->val == pRoot2->val) 23 { 24 result = DoesTreeHaveTree2(pRoot1, pRoot2); 25 } 26 //两个树的根节点不相等,则从第一个树的左结点开始 27 if (!result) 28 { 29 result = HasSubtree(pRoot1->left, pRoot2); 30 } 31 //两个树的根节点不相等且左结点也不相等,则从第一个树的右结点开始 32 if (!result) 33 { 34 result = HasSubtree(pRoot1->right, pRoot2); 35 } 36 } 37 return result; 38 } 39 private: 40 bool DoesTreeHaveTree2(TreeNode* pRoot1, TreeNode* pRoot2) 41 { 42 if (pRoot2 == NULL) 43 { 44 return true; 45 } 46 if(pRoot1 == NULL) 47 { 48 return false; 49 } 50 if (pRoot1->val != pRoot2->val) 51 { 52 return false; 53 } 54 return DoesTreeHaveTree2(pRoot1->left, pRoot2->left) && DoesTreeHaveTree2(pRoot1->right, pRoot2->right); 55 } 56 };

 

posted @ 2017-08-21 10:45  繁星的夜空2012  阅读(107)  评论(0编辑  收藏  举报