判断一颗二叉树是是否是另一颗树的子树。

来源:互联网 发布:php走势图源码 编辑:程序博客网 时间:2024/06/05 23:58

什么样的情况下,某一棵树会成为另一棵树的子数呢?子树的根节点是某一棵树的某个节点,接下来的子节点也相同,则该树是另一棵树的子集。

首先找到与根节点相同的节点,在进行遍历,可使用递归法。

template<class T>struct TreeNode{    T _data;    TreeNode<T>* _left;    TreeNode<T>* _right;    TreeNode(T x = T())        :_data(x)        , _left(NULL)        , _right(NULL)    {}};template<class T>bool Check(TreeNode<T>* root1, TreeNode<T>* root2){    if (root1 == NULL && root2 == NULL)//都可以走到尾节点,那自然是一直相同        return true;    if (root1 == NULL || root2 == NULL)//只有其中一个走到底,则对比后,至少一个节点不相同        return false;    if (root1->_data != root2->_data)        return false;    return Check(root1->_left, root2->_left) && Check(root1->_right, root2->_right);}template<class T>bool IsSubset(TreeNode<T>* root1, TreeNode<T>* root2){    if (root1 == NULL)        return false;    if (root1->_data == root2->_data)    {        if (Check(root1, root2))        {            return true;        }    }    return IsSubset(root1->_left, root2) || IsSubset(root1->_right, root2);}
阅读全文
0 0