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

    题目描述

    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
     
     
    题目思路:
    可以分两步:
    1)先找到A中和B根节点的值相等的节点R
    2)判断树A中以R为根节点的子树是否包含和树B一样的结构。
     
    特别注意:要访问地址的时候,一定要考虑为NULL的时候该怎么处理。
     
     1 /*
     2 struct 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 };*/
    10 class Solution {
    11 private:
    12     bool Equal(double num1, double num2) {
    13         double subtract = num1 - num2;
    14         return (subtract > -1e-8 && subtract < 1e-8);
    15     }
    16     bool DoesTree1HasTree2(TreeNode* pRoot1, TreeNode* pRoot2) {
    17         //考虑是否先判断pRoot1 == NULL ?
    18         //不能先简单判断pRoot1 == NULL就返回false, 因为可能pRoot2也为NULL,这是true
    19         if (pRoot2 == NULL)
    20             return true;
    21         if (pRoot1 == NULL)
    22             return false;
    23         if (!Equal(pRoot1->val, pRoot2->val))
    24             return false;
    25         return DoesTree1HasTree2(pRoot1->left, pRoot2->left) && DoesTree1HasTree2(pRoot1->right, pRoot2->right);
    26     }
    27 public:
    28     bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
    29     {
    30         bool flag = false;
    31         if (pRoot1 != NULL && pRoot2 != NULL) {
    32             if (Equal(pRoot1->val, pRoot2->val)) {
    33                 flag = DoesTree1HasTree2(pRoot1, pRoot2);
    34             }
    35             if (!flag) {
    36                 flag = HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2);
    37             }
    38         }
    39         return flag;
    40     }
    41 };
  • 相关阅读:
    9.堆排序
    8.全排列
    37.微信跳一跳辅助开发(C语言+EasyX)
    7.图形化实现快速排序法
    codeforces 632A A. Grandma Laura and Apples(暴力)
    codeforces 633D D. Fibonacci-ish(dfs+暴力+map)
    codeforces 633B B. A Trivial Problem(数论)
    codeforces 633A A. Ebony and Ivory(暴力)
    codeforces 622B B. The Time
    codeforces 622D D. Optimal Number Permutation(找规律)
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/11288239.html
Copyright © 2011-2022 走看看