面试题18:树的子结构

题目:输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:

struct BinaryTreeNode
{
      int val;
      BinaryTreeNode* left;
      BinaryTreeNode* right;
};

例如下图中的两棵树,由于A中有一部分树的结构和B是一样的,因此B是A的子结构。

 1 bool doesTree1HaveTree2(BinaryTreeNode* root1, BinaryTreeNode* root2)
 2 {//判断root2是否为root1的前缀
 3     if (root1 == NULL)
 4         return false;
 5     if (root2 == NULL)
 6         return true;
 7     if (root1->val!=root1->val)
 8         return false;
 9     return doesTree1HaveTree2(root1->left, root2->left) && doesTree1HaveTree2(root1->right, root2->right);    
10 }
11 bool hasSubTree(BinaryTreeNode* root1, BinaryTreeNode* root2) 12 { 13 if (root1 == NULL) 14 return false; 15 if (root2 == NULL) 16 return true; 17 bool result = false; 18 if (root1->val == root2->val) 19 result = doesTree1HaveTree2(root1,root2); 20 if (!result) 21 result = hasSubTree(root1->left, root2) || hasSubTree(root1->right, root2); 22 return result; 23 }

 

posted @ 2015-07-02 15:57  Rosanne  阅读(189)  评论(0编辑  收藏  举报