首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

软件工程师面试题精选100题(50)-树为另一树的子结构

2012-12-22 
程序员面试题精选100题(50)-树为另一树的子结构题目:二叉树的结点定义如下:struct TreeNode{int m_nValue

程序员面试题精选100题(50)-树为另一树的子结构
题目:二叉树的结点定义如下:

struct TreeNode
{
        int m_nValue;
        TreeNode* m_pLeft;
        TreeNode* m_pRight;
};

输入两棵二叉树A和B,判断树B是不是A的子结构。

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


bool HasSubtree(TreeNode* pTreeHead1, TreeNode* pTreeHead2){//主要进行特殊条件的判断        if((pTreeHead1 == NULL && pTreeHead2 != NULL) ||               (pTreeHead1 != NULL && pTreeHead2 == NULL))                return false;        if(pTreeHead1 == NULL && pTreeHead2 == NULL)                return true;        return HasSubtreeCore(pTreeHead1, pTreeHead2);}bool HasSubtreeCore(TreeNode* pTreeHead1, TreeNode* pTreeHead2){        bool result = false;        if(pTreeHead1->m_nValue == pTreeHead2->m_nValue)        {//根节点相同再进行进一步判断,如果根节点都不同就不用进一步判断了              result = DoesTree1HaveAllNodesOfTree2(pTreeHead1, pTreeHead2);        }        if(!result && pTreeHead1->m_pLeft != NULL)                result = HasSubtreeCore(pTreeHead1->m_pLeft, pTreeHead2);        if(!result && pTreeHead1->m_pRight != NULL)                result = HasSubtreeCore(pTreeHead1->m_pRight, pTreeHead2);        return result;}bool DoesTree1HaveAllNodesOfTree2(TreeNode* pTreeHead1, TreeNode* pTreeHead2){        if(pTreeHead2 == NULL) //如果pTree2都弄完了还没return说明符合要求                return true;        if(pTreeHead1 == NULL)//如果 pTree2没弄完,pTree1就弄玩了,说明pTree1还少了东西,肯定返回false                return false;        if(pTreeHead1->m_nValue != pTreeHead2->m_nValue)                return false;        return DoesTree1HaveAllNodesOfTree2(pTreeHead1->m_pLeft, pTreeHead2->m_pLeft) &&                DoesTree1HaveAllNodesOfTree2(pTreeHead1->m_pRight, pTreeHead2->m_pRight);}


   

热点排行