美文网首页
[二叉树] 树的子结构

[二叉树] 树的子结构

作者: FlyingReganMian | 来源:发表于2018-06-10 15:31 被阅读0次

    题目描述

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

    解题思路:
    前序遍历A树,寻找A树中和B树根节点相同的节点。
    A. 若A树的节点和B树的根节点相同,则A,B两树同时以当前节点开始前序遍历,比较A,B树中节点是否相同,若不相同则退出当前的遍历,并返回当前结果。
    B. 若A树的节点和B树的根节点不相同,或A中返回结果为false,继续遍历A树,查看是否还存在与B树根节点相同的节点

    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    class Solution {
    public:
        bool isSameTree(TreeNode* x, TreeNode* y)
        {
            bool res = false;
            if(y == NULL) return true;//y=NULL,证明B树中所有节点已经比较完了,并且均与A树节点相同
            if(x == NULL) return false;//B树节点还没有比较完,A树节点已经比较完了。
            
            if(x->val == y->val)
            {
                res = isSameTree(x->left,y->left);
                if(res)
                {
                    res = isSameTree(x->right,y->right);
                }
            }
            return res;
        }
        bool HasSubtree(TreeNode*x, TreeNode* y)
        {
            bool res = false;
            if(x==NULL || y==NULL)
                return false;
            if(x->val == y->val)//在A树中找到与B树根节点相同的节点
            {
                res = isSameTree(x,y);
            }
            if(!res)//没有找到相同的节点或B树此时不是A树种以当前节点为根节点树的子树
                res = HasSubtree(x->left,y);
            if(!res)
                res = HasSubtree(x->right,y);
            
            return res;
        }
    };
    

    相关文章

      网友评论

          本文标题:[二叉树] 树的子结构

          本文链接:https://www.haomeiwen.com/subject/yfnfeftx.html