zoukankan      html  css  js  c++  java
  • Leetcode 572. 另一个树的子树 做题小结

    题目:

    给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
    
    示例 1:
    给定的树 s:
    
         3
        / 
       4   5
      / 
     1   2
    给定的树 t:
    
       4 
      / 
     1   2
    返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。
    
    示例 2:
    给定的树 s:
    
         3
        / 
       4   5
      / 
     1   2
        /
       0
    给定的树 t:
    
       4
      / 
     1   2
    返回 false。
    

    解题思路:

    看到题目描述,首先判断一个树是否是另一棵树的子树,很明显想到可以用递归,但是两棵树完全相同也可以看做一棵树是另一棵树的子树。
    所以自然而然想到用一个判断两棵树是否相同的递归函数。
    然后就上代码吧~~

    代码:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public boolean isSubtree(TreeNode s, TreeNode t) {
            if (t == null) return true;   // t 为 null 一定都是 true
            if (s == null) return false;  // 这里 t 一定不为 null, 只要 s 为 null,肯定是 false
            return isSubtree(s.left, t) || isSubtree(s.right, t) || isSameTree(s,t);
        }
    
        /**
         * 判断两棵树是否相同
         */
        public boolean isSameTree(TreeNode s, TreeNode t){
            if (s == null && t == null) return true;
            if (s == null || t == null) return false;
            if (s.val != t.val) return false;
            return isSameTree(s.left, t.left) && isSameTree(s.right, t.right);
        }
    }
    
    
  • 相关阅读:
    下拉菜单的option的value属性值问题
    GDAL1.9.1 IN VS2008 C#中的编译及使用
    多表连接 去重
    【示例代码】HTML+JS 画图板源码分享
    Winet API 支持HTTPP/SOCKS代理
    入门Html
    关于CDC在非控件类中的使用
    The document "ViewController.xib" could not be opened. Could not read archive.
    华为的一道题
    [置顶] WEBSOKET服务器搭建
  • 原文地址:https://www.cnblogs.com/nmydt/p/14195317.html
Copyright © 2011-2022 走看看