树的子结构判断

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


 1 #include<iostream>
2 using namespace std;
3
4 struct BinaryTreeNode {
5 int m_nValue;
6 BinaryTreeNode* m_pLeft;
7 BinaryTreeNode* m_pRight;
8 }
9
10 bool DoesTree1HasTree2(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2) {
11 if(pRoot2 == NULL)
12 return true;
13 if(pRoot1 == NULL)
14 return false;
15
16 if(pRoot2->m_nValue == pRoot1->m_nValue)
17 return false;
18 return DoesTree1HasTree2(pRoot1->m_pLeft, pRoot2->m_pLeft)
19 && DoesTree1HasTree2(pRoot1->m_pRight, pRoot2->m_pRight);
20 }
21
22 bool HasSubTree(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2) {
23 bool result = false;
24
25 if(pRoot1 != NULL && pRoot2 != NULL) {
26 if(pRoot2->m_nValue == pRoot1->m_nValue)
27 result = DoesTree1HasTree2(pRoot1, pRoot2);
28 if(!result)
29 result = HasSubTree(pRoot1->m_pLeft, pRoot2);
30 if(!result)
31 result = HasSubTree(pRoot1->m_pRight, pRoot21);
32 }
33 }
34
35 int main()
36 {
37
38 return 0;
39 }

时间: 2024-08-03 06:53:11

树的子结构判断的相关文章

28、输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路:  1.当Tree1和Tree2都不为零的时候,才进行比较.否则直接返回false  2. 2.1如果找到了对应Tree2的根节点的点, 以这个根节点为为起点判断是否包含Tree2 2.2 如果找不到,那么就再去root的左孩子当作起点,去判断时候包含Tree22.3 如果还找不到,那么就再去root的右孩子当作起点,去判断时候包含Tree2 1 public class Solution

【剑指offer】树的子结构

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25907685 剑指offer第18题,九度OJ上测试通过! 题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行一个整数n,m(1<=n<=1000,1<=m<=1000):n代表将要输入的二叉树A的节点个数(节点从1开始计数),m代表将要输入的二叉树B的节点个数(节点从1开始计数).

剑指offer之树的子结构

题目: 树的子结构 链接: https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?tpId=13&tqId=11170&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路: 分为两步: 第一步:

剑指 offer 树的子结构

题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构). 第一遍没写出来错误点:认为首先应该找到pRoot1等于pRoot2的节点,但是递归就是自己在不断递归中寻找相等的节点的.判断是否相等可以完全放到另外一个函数中进行判断.主函数主要就是看结果,比较相等可以完全放到另外一个函数中去. /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeN

代码的鲁棒性:树的子结构

输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 代码实现方式一: /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public boolean HasSubtree(TreeNode

剑指offer——树的子结构 (JAVA代码)

版权声明:本文为博主原创文章,未经博主允许不得转载. 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构). 解题思路: 首先看牛客网给出的测试用例: 一般对于树的操作不像链表一样,操作更复杂,如果使用循环遍历的话,对于非完全二叉树规律难寻,一般通用的方法就是使用递归求解,本题也不例外,同样使用递归求解,求解的大体思路是首先判断B的根节点和A的根节点是否相同(这里的相同是指节点的值相同并且左右子节点相同),如果相同比较他们的左右子节点,这一步骤是

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

题目描述:树的子结构 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析:此题可以拆成两题,1.在二叉树中查找是否存在某个结点:2.判断两个二叉树是否有相同的结构 Java代码: class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public class

树的子结构-剑指Offer

树的子结构 题目描述 输入两颗二叉树A,B,判断B是不是A的子结构. 思路 分两步来实现 先判断Tree1里的节点有没有和Tree2的根节点相同值得节点,递归的判断,若有,侧判断第二步,否则,返回false 从这个有相同值的节点开始判断,递归的左右对应的判断子树是否相等,注意空指针的情况 注意:在编写遍历树的代码时一定要高度警惕,在每一处要访问地址的时候都要问问自己这个地址有没有可能是NULL,如果是该怎么处理.(为了确保自己代码的完整正确,写完代码后要多用几个测试用例检验自己的程序) 代码 /

树的子结构(剑指offer)递归

树的子结构 参与人数:1611时间限制:1秒空间限制:32768K 通过比例:18.19% 最佳记录:0 ms|0K(来自  mearo) 题目描述 输入两颗二叉树A,B,判断B是不是A的子结构. 链接:http://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 思路:判断A