Subtree of Another Tree:判断一棵树是否是另一棵树的子树

来源:互联网 发布:我的世界0.15.1枪械js 编辑:程序博客网 时间:2024/05/29 14:35

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 s could 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. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */class Solution {    public boolean isSame(TreeNode s,TreeNode t){        if(s==null&&t==null) return true;        if((s!=null&&t==null)||(s==null&&t!=null)) return false;        if(s.val!=t.val) {            return false;        }else{            return isSame(s.left,t.left)&&isSame(s.right,t.right);        }           }        public boolean isSubtree(TreeNode s, TreeNode t) {        if(s==null) return false;        if(t==null) return false;        return  isSame(s,t)||isSubtree(s.left,t)||isSubtree(s.right,t);    }}