zoukankan      html  css  js  c++  java
  • 树的子结构

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

    【思路】首先我们整理下这道题目的思路,首先我们去遍历二叉树A,然后去寻找与二叉树根节点相同的节点,这里我们也使用递归的方法!当找到相同节点后,我们再开始判断从这两个相同节点出发的两棵树是否为子树关系!在判断时,仍然使用递归的思路去遍历,如果root2遍历完了,那么返回true,说明二叉树B是二叉树A的子树。如果root1遍历完了,则返回false,同时必须满足遍历的节点必须相同!

     1/*
     2struct TreeNode {
     3    int val;
     4    struct TreeNode *left;
     5    struct TreeNode *right;
     6    TreeNode(int x) :
     7            val(x), left(NULL), right(NULL) {
     8    }
     9};*/
    10class Solution {
    11public:
    12    bool isSubtree(TreeNode* root1, TreeNode* root2){
    13        if(root2 == nullptr)
    14            return true;
    15        if(root1 == nullptr)
    16            return false;
    17        return (root1->val == root2->val) && 
    18            isSubtree(root1->left, root2->left) && isSubtree(root1->right, root2->right);
    19    }
    20
    21    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
    22    {
    23        if(pRoot1 == nullptr || pRoot2 == nullptr){
    24            return false;
    25        }
    26        bool result = false;
    27        if(pRoot1->val == pRoot2->val){
    28            result = isSubtree(pRoot1, pRoot2); 
    29        }
    30        if(!result){
    31            result = HasSubtree(pRoot1->left, pRoot2)
    32                  || HasSubtree(pRoot1->right, pRoot2);
    33        }
    34        return result;
    35    }
    36};
  • 相关阅读:
    整理Xen理论知识
    搭建Hadoop
    Java、中Date的格式初始化以及Calendar的使用
    学习Xen
    关于mpi的理论知识以及编写程序来实现数据积分中的梯形积分法。
    题解-CF1396C Monster Invaders
    题解-CF1139D Steps to One
    qq 表情库
    题解-洛谷P6788 「EZEC-3」四月樱花
    题解-CF1401E Divide Square
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11329153.html
Copyright © 2011-2022 走看看