zoukankan      html  css  js  c++  java
  • 剑指Offer16 判断子树

      1 /*************************************************************************
      2     > File Name: 17_MirrorOfBinaryTree.cpp
      3     > Author: Juntaran
      4     > Mail: JuntaranMail@gmail.com
      5     > Created Time: 2016年08月30日 星期二 17时12分37秒
      6  ************************************************************************/
      7 
      8 #include <stdio.h>
      9 #include <stdlib.h>
     10 #include <malloc.h>
     11 #include <bits/stdc++.h>
     12 
     13 using namespace std;
     14 
     15 // 二叉树结构体
     16 struct TreeNode
     17 {
     18     int val;
     19     TreeNode* left;
     20     TreeNode* right;
     21 };
     22 
     23 TreeNode* createTree()
     24 {
     25     TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
     26     root->val = 8;
     27     root->left = (TreeNode*)malloc(sizeof(TreeNode));
     28     root->left->val = 8;
     29     root->right = (TreeNode*)malloc(sizeof(TreeNode));
     30     root->right->val = 7;
     31     root->right->left = NULL;
     32     root->right->right = NULL;
     33     root->left->left = (TreeNode*)malloc(sizeof(TreeNode));
     34     root->left->left->val = 9;
     35     root->left->left->left = NULL;
     36     root->left->left->right = NULL;
     37     root->left->right = (TreeNode*)malloc(sizeof(TreeNode));
     38     root->left->right->val = 2;
     39     root->left->right->left = (TreeNode*)malloc(sizeof(TreeNode));
     40     root->left->right->left->val = 4;
     41     root->left->right->left->left = NULL;
     42     root->left->right->left->right = NULL;
     43     root->left->right->right = (TreeNode*)malloc(sizeof(TreeNode));
     44     root->left->right->right->val = 7;
     45     root->left->right->right->left = NULL;
     46     root->left->right->right->right = NULL;
     47     
     48     return root;
     49 }
     50 
     51 TreeNode* createSubTree()
     52 {
     53     TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
     54     root->val = 8;
     55     root->left = (TreeNode*)malloc(sizeof(TreeNode));
     56     root->left->val = 9;
     57     root->right = (TreeNode*)malloc(sizeof(TreeNode));
     58     root->right->val = 2;
     59     root->left->left = NULL;
     60     root->left->right = NULL;
     61     root->right->left = NULL;
     62     root->right->right = NULL;
     63     
     64     return root;
     65 }
     66 
     67 bool DoesTree1HaveTree2(TreeNode* root1, TreeNode* root2)
     68 {
     69     if (root2 == NULL)
     70         return true;
     71     if (root1 == NULL)
     72         return false;
     73     if (root1->val != root2->val)
     74         return false;
     75     
     76     return DoesTree1HaveTree2(root1->left, root2->left) && DoesTree1HaveTree2(root1->right, root2->right);
     77 }
     78 
     79 bool hasSubTree(TreeNode* root1, TreeNode* root2)
     80 {
     81     int ret = false;
     82     if (root1!=NULL && root2!=NULL)
     83     {
     84         if (root1->val == root2->val)
     85             ret = DoesTree1HaveTree2(root1, root2);
     86         if (ret == false)
     87             ret = hasSubTree(root1->left, root2);
     88         if (ret == false)
     89             ret = hasSubTree(root1->right, root2);
     90     }
     91 }
     92 
     93 // 层序遍历二叉树
     94 void PrintTreeByLevel(TreeNode* root)
     95 {
     96     if (root == NULL)
     97         return;
     98     
     99     vector<TreeNode*> vec;
    100     vec.push_back(root);
    101     int cur = 0;
    102     int last = 1;
    103     
    104     while (cur < vec.size())
    105     {
    106         last = vec.size();
    107         while (cur < last)
    108         {
    109             printf("%d ", vec[cur]->val);
    110             if (vec[cur]->left != NULL)
    111                 vec.push_back(vec[cur]->left);
    112             if (vec[cur]->right != NULL)
    113                 vec.push_back(vec[cur]->right);
    114             
    115             ++ cur;
    116         }
    117         printf("
    ");
    118     }
    119 }
    120 
    121 int main()
    122 {
    123     TreeNode* tree1 = createTree();
    124     TreeNode* tree2 = createSubTree();
    125     
    126     PrintTreeByLevel(tree1);
    127     printf("
    ");
    128     PrintTreeByLevel(tree2);
    129     printf("
    ");
    130     
    131     bool ret = hasSubTree(tree1, tree2);
    132     if (ret == true)
    133         printf("Yes
    ");
    134     else
    135         printf("No
    ");
    136     
    137     return 0;
    138 }
  • 相关阅读:
    zookeeper-3.4.6集群安装
    js 函数参数个数
    警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:webProject'
    开始写博客了
    使用wsimport对接WebService 生成Java客户端
    LocalDateTime反序列化报错:cannot deserialize from Object value
    MinIO上传文件The difference between the request time and the server's time is too large.异常
    Maven scope属性说明
    SpringBoot整合MinIO实现文件上传 附demo
    Map从入门到性能分析-imooc学习笔记【完】
  • 原文地址:https://www.cnblogs.com/Juntaran/p/5823161.html
Copyright © 2011-2022 走看看