• 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);
        }
    }
    
    
  • 相关阅读:
    Web前端学习笔记之BootStrap
    js 闭包解决方案
    函数节流简要解析
    js 观察者模式
    arguments解析
    js 职责链模式简要介绍
    js 工厂模式简要介绍
    jsonp跨域总结
    算法复杂度
    正则表达式的$
  • 原文地址:https://www.cnblogs.com/nmydt/p/14195317.html
Copyright © 2020-2023  润新知