【编程题目】Pq.11--树的子结构
来源:互联网 发布:宜信大数据 待遇 编辑:程序博客网 时间:2024/06/05 08:59
一、题目描述
输入两棵二叉树A和B,判断B是不是A的子结构。
二、实现
思路非常简单,只需要遍历树A,首先查找和B根节点相同的节点,再判断B是不是A的子结构即可。树的操作同样涉及大量的指针,需要检查并作相应处理。
struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};bool DoesTreeAHaveTreeB(BinaryTreeNode* pRootA, BinaryTreeNode* pRootB){ /*递归终止条件:到达任一树的叶子节点*/ if (pRootA == NULL) return true; if (pRootB == NULL) return true; /*根节点不同*/ if (pRootA->m_nValue != pRootB->m_nValue) return false; /*递归判断左右两个节点是否相同*/ return DoesTreeAHaveTreeB(pRootA->m_pLeft, pRootB->m_pLeft) && DoesTreeAHaveTreeB(pRootA->m_pRight, pRootB->m_pRight);}bool HasSubtree(BinaryTreeNode* pRootA, BinaryTreeNode* pRootB){ bool result = false; if (pRootA != NULL&&pRootB != NULL) { /*根节点相同,则判断左右子节点是否相同*/ if (pRootA->m_nValue == pRootB->m_nValue) result = DoesTreeAHaveTreeB(pRootA, pRootB); /*继续遍历树A*/ if (!result) result = HasSubtree(pRootA->m_pLeft, pRootB); if (!result) result = HasSubtree(pRootA->m_pRight, pRootB); } return result;}
0 0
- 【编程题目】Pq.11--树的子结构
- 【编程题目】Pq.2--重建二叉树
- 【编程题目】Pq.9--反转链表
- 题目1520:树的子结构
- 题目1520:树的子结构
- 题目1520:树的子结构
- 题目1520:树的子结构
- 题目1520:树的子结构
- 题目18:树的子结构
- 算法题目-树的子结构
- 算法题目---树的子结构
- 【剑指Offer面试编程题】题目1520:树的子结构--九度OJ
- 【编程题目】Pq.3--二维数组中的查找
- 【编程题目】Pq.10--合并两个排序链表
- 【编程题目】Pq.1--空格替换的O(n)解法(优化时间效率的解法)
- 【编程题目】Pq.6--数值的整数次方(关于代码完整性及错误处理方式的探讨)
- 【编程题目】Pq.7--打印1到最大的n位数(关于大数问题的探讨)
- 【编程题目】Pq.8--求单向链表的倒数第k个节点(关于代码鲁棒性的探讨)
- 一个返回json对象的问题 key 为数字时 会默认从小到大进行排序
- 0428
- Unsafe--Java中Unsafe类详解
- windows10系统如何将系统语言由汉语改为英语
- 大数据之路
- 【编程题目】Pq.11--树的子结构
- spark sql scala 开发环境搭建 以及必要jar包导入
- Linux中mv的使用方法
- UDP通讯
- MAC 配置SSH免密码登录
- Android:手把手带你分析 Protocol Buffer使用 源码
- 支付系统中订单redis防重的使用
- Java求数组最大值最小值新颖代码!! !
- 由LeetCode引发的二叉树 前序,中序,后序总结