一棵树是否为另一棵树的子结构

题目描述

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

问题描述:给定两个二叉树的根节点,判断第二树是否是第一个树的子树,如果是返回1,否则返回0.

分析:这个是百度的一道笔试题目,属于经典的数据结构问题,子树判断问题,针对这个问题可以采用递归的方法判断,

         拿第二个树的每个节点去和第一个树做匹配,如果某个节点匹配成功,就接着往下匹配,否则重新从第二个树的的根节点开始。


注意区别:

一棵树是否为另一棵树的子树

http://blog.csdn.net/yangquanhui1991/article/details/51759262

测试用例:

树1


            4

      2            6

1         3   5        7


树2


           4

  2                 6


树3


           6

  5                  7


结果:

树2是树1的子树

树3是树1的子树




/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
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 IsSubTree(pRoot1->left,pRoot2->left)&&IsSubTree(pRoot1->right,pRoot2->right);
        else return false;
    }
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
    {
        
        if(pRoot1==NULL||pRoot2==NULL) return false;
        return IsSubTree(pRoot1,pRoot2)||HasSubtree(pRoot1->left, pRoot2)
            ||HasSubtree(pRoot1->right, pRoot2);
    }
};


你可能感兴趣的:(剑指offer)