`

程序员面试题精选100题(50)-树为另一树的子结构

C++ 
阅读更多
题目:二叉树的结点定义如下:

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);

}


   
分享到:
评论

相关推荐

    程序员面试题精选100题-何海涛

    程序员面试题精选100题-何海涛 程序员 面试题 算法 数据结构

    程序员面试题精选100题

    程序员面试题精选 100 题(01)-把二元查找树转变成排序的 双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点, 只调整指针的指向。 程序员面试题精选 100 题...

    程序员面试题精选100题【数据结构 /算法】

    由第三方作者花费大量时间收集并整理散落在茫茫网络中的面经,并从中精选出若干具有代表性的技术类的面试题展开讨论,希望能给读者带来一些启发 例如; 把二元查找树转变成排序的双向链表 设计包含min函数的栈 把...

    程序员面试题集锦

    内涵java面试题,各大公司面试题,和数据结构程序员面试题100集锦

    程序员面试题精选100题与解法

    面试必备书籍。 经典100题。关于数据结构,算法,各种大公司的面试题。

    程序员面试100题数据结构和算法

    非常好的面试题,经典数据结构和算法题目。

    C/C++程序员面试指南.杨国祥(带详细书签).pdf

    面试题15:在二元树中找出和为某一值的所有路径 第11章 排序 11.1 插入排序 面试题1:编码实现直接插入排序 面试题2:编码实现希尔(Shell)排序 11.2 交换排序 面试题3:编码实现冒泡排序 面试题4:编码实现快速...

    Interview_Guide.rar

    Interview_Guid.rar | ----Algorithm_Interview_Notes-Chinese-master | --------A-机器学习 --------B-深度学习 ...----------------100IT名企java面试必考面试题.pdf ----Interview-code-practice-python-master

    程序员面试100题(何海涛)

    程序员面试 100题 前60题 里面的内容主要是 数据结构方面 : 数组 链表 二叉树

    程序员面试100题含数据结构

    C语言的笔试题,包括数据结构。祝大家顺利通过笔试,面试!

    数据结构+算法面试100题(程序员必做)

    300多道题目,含有程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列

    微软面试100题系列之高清完整版PDF文档[带目录+标签]by_July

    本微软面试100题系列,共计11篇文章,300多道面试题,截取本blog索引性文章:程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦:http://blog.csdn.net/v_july_v/article/details/6543438,中的第一部分...

    微软等数据结构+算法面试100题全部答案集锦

    面试100题,自此,与上千网友一起做,一起思考,一起解答这些面试题目,最终成就了一个名为:结构之法 算法之道的编程面试与算法研究并重的博客,如今,此博客影响力逐步渗透到海外,及至到整个互联网。 在此之前,...

    JAVA笔试面试资料JDBC HTTP、JSP、Servlet、Struts面试题汇总资料.zip

    java工程师面试题大全-100%公司笔试题你都能碰到几个.docx Java开发工程师上机笔试题.docx Java开发求职面试题.docx Java开发笔试题.docx Java数据结构类面试题.docx Java数据结构题.docx Java笔试面试宝典.docx ...

    C程序员面试100题.ppt

    涵盖计算机网络 C/C++语言 操作系统 数据结构与算法 设计模式 面试面经

    c++ 面试题 总结

    C++面试题 1.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? virtual修饰符会被隐形继承的。 private 也被集成,只事派生类没有访问权限而已 virtual可加可不加 子类的...

    数据结构和算法面试100题及答案.rar v

    程序员编程艺术系列之数据结构和算法面试100题及答案

    数据结构大汇总

    数据结构算法锦集_C_C++ 数据结构算法:VC++6.0程序集 数据结构和算法学习笔记(经典)数据结构笔记(C++版) --数据结构 各类公司算法面试题,全 程序员面试题精选100题-何海涛 程序员面试宝典(全) :微软等数据结构+...

Global site tag (gtag.js) - Google Analytics