zoukankan      html  css  js  c++  java
  • 面试题18:树的子结构

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

    struct BinaryTreeNode
    {
          int val;
          BinaryTreeNode* left;
          BinaryTreeNode* right;
    };

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

     1 bool doesTree1HaveTree2(BinaryTreeNode* root1, BinaryTreeNode* root2)
     2 {//判断root2是否为root1的前缀
     3     if (root1 == NULL)
     4         return false;
     5     if (root2 == NULL)
     6         return true;
     7     if (root1->val!=root1->val)
     8         return false;
     9     return doesTree1HaveTree2(root1->left, root2->left) && doesTree1HaveTree2(root1->right, root2->right);    
    10 }
    11 bool hasSubTree(BinaryTreeNode* root1, BinaryTreeNode* root2) 12 { 13 if (root1 == NULL) 14 return false; 15 if (root2 == NULL) 16 return true; 17 bool result = false; 18 if (root1->val == root2->val) 19 result = doesTree1HaveTree2(root1,root2); 20 if (!result) 21 result = hasSubTree(root1->left, root2) || hasSubTree(root1->right, root2); 22 return result; 23 }
  • 相关阅读:
    外观模式
    享元模式
    装饰模式
    适配器模式
    组合模式
    典型用户模板与场景
    知识圈APP开发记录(十二)
    知识圈APP开发记录(十一)
    知识圈APP开发记录(十)
    周总结(七)
  • 原文地址:https://www.cnblogs.com/happygirl-zjj/p/4616310.html
Copyright © 2011-2022 走看看