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

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

    这道题有点复杂,要用到两个递归来判断。首先因为约定的空树不是任意一个树的子树,所以先判断一下两个树是不是为空,若空则返回false。

    然后用另一个递归函数判断B是不是当前树A的子结构。如果是,则返回true。如果不是,那么再递归判断B是不是树A的左子树的子树,或者B是不是树A的右子树的子树,只要有一个满足,那么B都算是树A的子树。

    在判断子结构的递归函数里,如果B的当前节点为空了,说明到达叶子节点,也就是整个树都是子结构,所以返回true。否则,如果B的当前节点不空,但A的当前节点空了,说明匹配还没完成就没办法继续匹配了,那么返回false。再接下来,对比两个根节点的值是不是一样,如果不一样,肯定不是子结构,也直接返回false。如果值一样,那么递归遍历两棵树的左子树是不是子结构关系,并且两棵树的右子树是不是子结构关系。

    c++代码如下:

     1 class Solution {
     2 public:
     3     bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
     4     {
     5         if(!pRoot1 || !pRoot2) return false;
     6         if(ispart(pRoot1, pRoot2)) return true;
     7         return HasSubtree(pRoot1->left, pRoot2) || ispart(pRoot1->right, pRoot2);
     8     }
     9     
    10     bool ispart(TreeNode* p, TreeNode* q){
    11         if(!q) return true;
    12         if(!p || p->val != q->val) return false;
    13         
    14         return ispart(p->left, q->left) && ispart(p->right, q->right);
    15         
    16     }
    17 };
  • 相关阅读:
    .gitignore文件的位置
    robotframework 用法
    selenium 问答
    python 定时任务执行
    final关键字
    开启线程的方式。
    约瑟夫环。
    1000的阶乘,1.求出所有零的个数 2.求出尾部零的个数
    三种代码块。
    static关键字的基本用法。
  • 原文地址:https://www.cnblogs.com/hellosnow/p/12079411.html
Copyright © 2011-2022 走看看