給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具備相同結構和節點值的子樹。s 的一個子樹包括 s 的一個節點和這個節點的全部子孫。s 也能夠看作它自身的一棵子樹。node
示例 1:git
給定的樹 s: 3 / \ 4 5 / \ 1 2 給定的樹 t: 4 / \ 1 2 返回 true,由於 t 與 s 的一個子樹擁有相同的結構和節點值。
示例 2:github
給定的樹 s: 3 / \ 4 5 / \ 1 2 / 0 給定的樹 t: 4 / \ 1 2 返回 false。
來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/subtree-of-another-tree
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。算法
本題當前只寫了DFS遞歸判斷題解;
另外還有:網絡
之後待研究..ui
t如果s的一個子樹,那麼t等於s或者是s的左右子樹之一;
步驟:code
算法複雜度:遞歸
package leetcode; /** * @author ZhouJie * @date 2020年5月7日 上午12:45:22 * @Description: 572. 另外一個樹的子樹 * */ public class LeetCode_0572 { } // Definition for a binary tree node. class TreeNode_0572 { int val; TreeNode_0572 left; TreeNode_0572 right; TreeNode_0572(int x) { val = x; } } class Solution_0572 { /** * @author: ZhouJie * @date: 2020年5月7日 上午12:46:19 * @param: @param s * @param: @param t * @param: @return * @return: boolean * @Description: 1-遞歸判斷t是否是s自己或者是其子樹之一; * */ public boolean isSubtree_1(TreeNode_0572 s, TreeNode_0572 t) { if (s == null && t == null) { return true; } else if (s != null && t != null) { // t多是s自己或者是s的左子樹/右子樹 return checkSubtree(s, t) || isSubtree_1(s.left, t) || isSubtree_1(s.right, t); } else { return false; } } /** * @author: ZhouJie * @date: 2020年5月7日 上午12:52:54 * @param: @param s * @param: @param t * @param: @return * @return: boolean * @Description: 是否子樹判斷 * */ private boolean checkSubtree(TreeNode_0572 s, TreeNode_0572 t) { if (s == null && t == null) { return true; } else if (s != null && t != null && s.val == t.val) { return checkSubtree(s.left, t.left) && checkSubtree(s.right, t.right); } else { return false; } } }