zoukankan      html  css  js  c++  java
  • 【LeetCode & 剑指offer刷题】树题8:26 树的子结构(572. Subtree of Another Tree)

    【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)

    572. Subtree of Another Tree

    Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s. A subtree of s is a tree consists of a node in s and all of this node's descendants. The tree scould also be considered as a subtree of itself.
    Example 1:
    Given tree s:
      3
     /
     4  5
    /
    1 2
    Given tree t:
     4
    /
    1  2
    Return true, because t has the same structure and node values with a subtree of s.
    Example 2:
    Given tree s:
         3
        /
       4   5
      /
     1  2
        /
       0
    Given tree t:
     4
    /
    1 2
    Return false.

     
    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    /*
    问题:判断某子树是否是主树的子结构
    方法:前序遍历的递归方法
    主树s, 子树t
    */
    class Solution
    {
    public:
        bool isSubtree(TreeNode* s, TreeNode* t) //遍历主树s(前序遍历递归法)
        {
            if(s == nullptr) return false; //前序遍历递归的出口,注意一定要加判断空指针的语句,后面有s->left和s->right
           
            //前序遍历(递归法)主树t各结点,从根结点到左子树再到右子树(s一直在延伸,展开分支)
            if(isSame(s,t)) //判断当前结点下的子树是否一样
                return true; 
            else             //判断当前结点的左子树是否为子树t,再判断右子树是否为子树t
                return isSubtree(s->left, t) || isSubtree(s->right, t); 
        }
    private:
        bool isSame(TreeNode* s, TreeNode* t) //确定s父结点后,开始同时扫描(递归法)s和t,看是各个结点是否相等
        {
            if(s == nullptr && t == nullptr) return true; //如果最后均遍历到空结点,返回true
            else if(s == nullptr || t == nullptr) return false; //如果一个遍历到空,一个没有,说明不同,返回false
           
            if(s->val == t->val)
            {
                return isSame(s->left, t->left) && isSame(s->right, t->right);
            }
            else
                return false; //不相同,返回假 
        }
    };
     
     
     
  • 相关阅读:
    如何在网页上显示html代码?
    3s自动跳转到登陆界面
    数据交互 ajax代码整理
    45种Javascript技巧大全【转藏】
    react环境搭建
    overflow 那些我们忽略的特点
    CSS3 动画效果合集
    2016年上半年前端资源汇总
    math.js 使用...
    php Apache No input file
  • 原文地址:https://www.cnblogs.com/wikiwen/p/10225819.html
Copyright © 2011-2022 走看看