题目:二叉树的结点定义如下:
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题—何海涛》是一份详实的IT面试准备资料,由何海涛整理发布,旨在帮助应届毕业生和求职者准备面向微软、谷歌等知名科技公司的面试。此资料不仅收录了精选的100道面试题目,还提供了详细的解题...
本资源是程序员面试题精选100题,涵盖了算法、数据结构、操作系统、计算机网络、数据库等多个领域。今天,我们将深入分析其中的一道题目,即将二元查找树转换成排序的双向链表。 知识点一:二元查找树(Binary ...
二元查找树是一种特殊的树数据结构,其中每个节点包含一个键、一个关联的值、一个指向左子树的引用和一个指向右子树的引用。在二元查找树中,对于任意节点,其左子树中的所有节点的键都小于该节点的键,而右子树中...
具体来说,文档中详细讨论了一个在程序员面试中常见的算法问题:如何将二元查找树(Binary Search Tree,BST)转换为一个排序的双向链表。这是一个涉及树的遍历、指针操作、递归思维的经典算法问题。下面将详细介绍...
【程序员面试题精选100题【数据结构 /算法】】是针对求职程序员精心挑选的一系列面试题目,涵盖了数据结构和算法两大核心领域。这些题目旨在帮助应聘者提高面试技巧,提升对技术的理解,以便在激烈的就业市场竞争中...
程序员面试题精选100题 本文档概述了程序员面试题精选100题,涵盖了C++面试题和笔试题,其中有一道典型的题目是将二元查找树转换成排序的双向链表。 知识点一:二元查找树(Binary Search Tree) * 二元查找树是...
在软件开发行业中,数据结构与算法是程序员必须掌握的基础技能之一,尤其是在求职过程中,这部分知识更是考察的重点。其中,二叉查找树(Binary Search Tree, BST)作为一种重要的数据结构,因其高效的查找特性而在...
- 递归地处理右子树,将右子树转换为一个排序的右子链表。 - 连接右子链表的最小节点(即右子树的第一个节点)到当前节点的右指针。 - 当递归返回时,当前节点将成为链表的一部分。 - **思路二:中序遍历** - ...
在程序员的面试过程中,面试题往往涵盖了许多技术领域,包括数据结构、算法、操作系统、网络、数据库等。这里我们重点讨论的是如何将一个二元查找树(Binary Search Tree, BST)转换成一个排序的双向链表,这是一个...
例如,本文提到的《程序员面试题精选100题》就旨在为即将进入职场的程序员提供一系列经典的技术面试题目,帮助他们系统地复习相关知识和技术要点,从而提升面试表现。 #### 4. 具体案例分析:将二叉查找树转化为...