题目:

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

二叉树结构定义如下:

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

思路:

判断二叉树B是否为二叉树A的子树:

首先判断二叉树A的根节点值是否等于二叉树B的根节点值;

如果是,则继续往下遍历,判断二叉树A的左子节点和二叉树B的左子结点以及二叉树A的右子节点和二叉树B的右子节点是否都相等,直到叶子节点;(递归)

return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right);

如果不是,则判断二叉树B是否为二叉树A左子树的子树或者二叉树B是否为二叉树A右子树的子树;(递归)

result=HasSubtree(pRoot1->left,pRoot2);
result=HasSubtree(pRoot1->right,pRoot2);

代码:

struct TreeNode{int val;TreeNode* left;TreeNode* right;
};bool IsSubtree(TreeNode* pRoot1,TreeNode* pRoot2){if(pRoot2==NULL)return true;if(pRoot1==NULL)return false;if(pRoot1->val!=pRoot2->val)return false;return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right);
}bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){bool result=false;if(pRoot1!=NULL && pRoot2!=NULL){if(pRoot1->val==pRoot2->val)result=IsSubtree(pRoot1,pRoot2);if(!result)result=HasSubtree(pRoot1->left,pRoot2);if(!result)result=HasSubtree(pRoot1->right,pRoot2);}return result;
}

在线测试OJ:

http://www.nowcoder.com/books/coding-interviews/6e196c44c7004d15b1610b9afca8bd88?rp=1

AC代码:

class Solution {
public:bool IsSubtree(TreeNode* pRoot1,TreeNode* pRoot2){if(pRoot2==NULL)return true;if(pRoot1==NULL)return false;if(pRoot1->val!=pRoot2->val)return false;return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right);}bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){bool result=false;if(pRoot1!=NULL && pRoot2!=NULL){if(pRoot1->val==pRoot2->val)result=IsSubtree(pRoot1,pRoot2);if(!result)result=HasSubtree(pRoot1->left,pRoot2);if(!result)result=HasSubtree(pRoot1->right,pRoot2);}return result;}
};

  

(剑指Offer)面试题18:树的子结构相关推荐

  1. 剑指Offer - 面试题26. 树的子结构(双重递归)

    1. 题目 输入两棵二叉树A和B,判断B是不是A的子结构.(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值. 例如: 给定的树 A:3/ \4 5/ \1 2 ...

  2. 剑指offer面试题26. 树的子结构(链表)

    题目描述 输入两棵二叉树A和B,判断B是不是A的子结构.(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值. 思路 详见链接 代码 class Solution ...

  3. 【重点递归】剑指offer——面试题18:树的子结构

    剑指offer--面试题18:树的子结构 Solution1: 此题答案是抄的书上的,要记忆并熟练运用关于二叉树的递归思想!!! /* struct TreeNode {int val;struct ...

  4. [剑指offer]面试题18:树的子结构

    面试题18:树的子结构 题目:输入两棵二叉树A和B,判断B是不是A的子结构.二叉树结点的定义如下: struct BinaryTreeNode {int value;BinaryTreeNode *l ...

  5. 《剑指Offer》题目:树的子结构

    题目描述:树的子结构 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析:此题可以拆成两题,1.在二叉树中查找是否存在某个结点:2.判断两个二叉树是否 ...

  6. 【剑指offer-Java版】18树的子结构

    树的子结构:输入两棵二叉树A B,判断B是不是A的子结构 就是一个递归加上一个树的先序遍历 public class _Q18 {public boolean HasSubTree(BinaryTre ...

  7. 剑指offer(C++)-JZ26:树的子结构(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(我们约定空树不是任意一个树的子结构) ...

  8. 剑指Offer - 面试题18. 删除链表的节点

    1. 题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val ...

  9. 剑指offer面试题18. 删除链表的节点(双指针)(链表)

    题目描述 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 思路 详见链接 代码 class Solution:def deleteNode(self, ...

  10. 剑指offer(17)树的子结构

    1. 从根节点开始判断,判断树root2是不是root1的子树.  2. 如果不是,再递归判断root2是不是root1.left的子树.  3. 如果第二步没成立,则再判断root2是不是root1 ...

最新文章

  1. 华师大数据科学考研_2020年华东师范大学行政管理专业考研报录比、参考书目、考研经验分享...
  2. 知识图谱从哪儿来?实体关系抽取的现状和未来
  3. 如何通过 Serverless 技术降低微服务应用资源成本?
  4. How Many Tables
  5. unity and MySql
  6. oracle备份集注册,OracleRMAN将备份集重新注册到控制文件说明
  7. 字符串_字符串数组_字符_字符数组
  8. 低功耗无线模块超远距离无线传输实现中继的方法
  9. Java 时间处理 DateTimeFormatter
  10. Android 增量更新实例(Smart App Updates)
  11. 数据可视化大屏有哪些优势
  12. P1113 杂务 拓扑排序
  13. 【Xamarin.Android】探索android的底部导航视图
  14. 数学猜想验证步骤_10大仍未解开的数学难题
  15. 嵌入式C语言自我修养分享课件
  16. 软件测试电商web项目如何描述,测试web项目实战
  17. dreamweaver+cs6+android,使用Dreamweaver cs6开发移动应用
  18. 跨站脚本攻击(XSS)及防范措施
  19. 学生信息管理系统 jsp + servlet + mysql (2020)
  20. 推荐几个常用常玩的小游戏网址包括4399.com

热门文章

  1. php对提交数据的验证
  2. 【配置文件】log4j是什么log4j
  3. hibernate之HQL传中文参数乱码 解决办法
  4. n阶乘的c语言代码,求10000的阶乘(c语言代码实现)
  5. 【错误记录】Visual Studio 中编译 NDK 报错 ( no matching function for call to ‘cacheflush‘ cacheflush(); )
  6. 【Binder 机制】进程通信 | 用户空间与内核空间 | MMU 与虚拟内存地址
  7. 【运筹学】表上作业法 ( 示例 | 使用 “ 最小元素法 “ 找初始基可行解 )
  8. 前端基础:web语义化
  9. maven 常用插件3
  10. 最小树形图(朱刘算法)