树的子结构[数据结构]

来源:互联网 发布:什么叫app端口 编辑:程序博客网 时间:2024/06/05 18:21

题目:二叉树的结点定义如下:

struct TreeNode

{

        int m_nValue;

        TreeNode* m_pLeft;

        TreeNode* m_pRight;

};

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

例如,下图中的两棵树AB,由于A中有一部分子树的结构和B是一样的,因此B就是A的子结构。

                 1                                                   8
               /    \                                               /    \
              8    7                                             9    2
            /    \
           9    2
                /  \
               4  7

struct Node{int val;Node *left;Node *right;Node(int v){val = v;left = right = NULL;}};bool visitSub(Node *a, Node *b){if (b == NULL){return true;}if (a == NULL){return false;}if (a->val != b->val){return false;}return visitSub(a->left, b->left) && visitSub(a->right, b->right);}bool visit(Node *a, Node *b){bool result = false;if (a->val == b->val){result = visitSub(a, b);}if (!result && a->left != NULL){result = visit(a->left, b);}if (!result && a->right != NULL){result = visit(a->right, b);}return result;}bool hasSubtree(Node *a, Node *b){if (a == NULL && b == NULL){return true;}if (a == NULL && b != NULL){return false;}if (a != NULL && b == NULL){return false;}return visit(a, b);}


0 0