美文网首页
面试题26:树的子结构

面试题26:树的子结构

作者: 潘雪雯 | 来源:发表于2020-05-12 16:21 被阅读0次

题目

输入两颗二叉树A和B,判断B是不是A的子结构。二叉树的节点定义如下:

struct BinaryTreeNode{
    double             val;
    BinaryTreeNode* left;
    BinaryTreeNode* right;
};
image.png

解题思路

  1. 在树A中找出和树B的根节点的值一样的节点R
  2. 判断树A中以R为根节点的子树是不是包含和树B一样的结构

代码

  • 细节
    1)定义函数DoesTree1HaveTree2来判断两个子树的节点值是否相同
  1. 在判断两个节点值是否相等时,因为节点中值类型为double,所以不能直接写root1->val = root2->val,只能判断它们之差的绝对值在一个很小的范围内。
class Solution{
    public:
        bool Equal(double a,double b)
        {
            if((a-b > -0.000001) && (a-b < 0.000001))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        bool DoesTree1HaveTree2(BinaryTreeNode* root1,BinaryTreeNode* root2)
        {
            if(root2 == NULL) return true;
            if(root1 == NULL) return false;
            if(!Equal(root1->val,root2->val))
            {
                return false;
            }
            return DoesTree1HaveTree2(root1->left,root2->left) && DoesTree1HaveTree2(root1->right,root2->right);
        }
        
        bool hasSubtree(BinaryTreeNode *root1,BinaryTreeNode *root2)
        {
            bool result = false;
            if(root1!= NULL && root2 != NULL)
            {
                //A树中节点值和B树中节点值相同
                if(Equal(root1->val,root2->val))
                {
                    result = DoesTree1HaveTree2(root1,root2);
                }
                if(!result)
                {
                    result = hasSubtree(root1->left,root2);
                }
                if(!result)
                {
                    result = hasSubtree(root1->right,root2);
                }
            }
            return result;
        }
};

完整代码见Github,看到这篇一定要点开这里哦,一定不会让你失望的,代码从头文件到main()都补充完整了~~~

相关文章

  • LeetCode | 面试题26. 树的子结构【Python】

    LeetCode 面试题26. 树的子结构【Medium】【Python】【DFS】 问题 力扣 输入两棵二叉树A...

  • 面试题26:树的子结构

    输入两棵二叉树A,B,判断B是不是A的子结构。 ps:我们约定空树不是任意一个树的子结构 思路一:总的分为两步第一...

  • 面试题26:树的子结构

    题目 输入两颗二叉树A和B,判断B是不是A的子结构。二叉树的节点定义如下: 解题思路 在树A中找出和树B的根节点的...

  • 面试题26: 树的子结构

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

  • 面试题26:树的子结构

    题目:输入两颗二叉树A和B,判断B是不是A的子结构,二叉树节点的定义如下: 思路:通过递归来实现。先判断A和B的根...

  • 面试题26:树的子结构

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

  • 面试题26:树的子结构

    该题的思路应该使用递归来判断,通过判断左子树和右子树来判断树是否是子结构,当子结构为空时,则判断成功

  • 面试题26:树的子结构

    题目描述 输入两棵二叉树A和B,判断B是不是A的子结构。二叉树节点的定义如下: 解题思路 在树A中查找于根节点的值...

  • 面试题26. 树的子结构

    题目 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中...

  • 面试题26. 树的子结构

    题目描述 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 ...

网友评论

      本文标题:面试题26:树的子结构

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