[LeetCode]Subtree of Another Tree判断一棵树是不是另一棵树的子树

将树序列化为字符串,空节点用符号表示,这样可以唯一的表示一棵树。

用list记录所有子树的序列化,和目标树比较。

List<String> list = new ArrayList<>();
    public boolean isSubtree(TreeNode s, TreeNode t) {
        helper(s);
        helper(t);
        String tt = list.get(list.size()-1);
        for (int i = 0;i<list.size()-1;i++) {
            if (list.get(i).equals(tt)) return true;
        }
        return false;
    }
    public String helper(TreeNode root)
    {
        StringBuilder cur = new StringBuilder();
        if (root==null)
        {
            cur.append("#");
            return new String(cur);
        }
        cur.append(root.val);
        cur.append(helper(root.left));
        cur.append(helper(root.right));
        String s = new String(cur);
        list.add(s);
        return s;
    }

LeetCode上还有更好地答案,是递归地判断每个节点的值是不是相等,也很好理解。

上边这种做法是一个大类的做法,就是每个节点都递归地构建一个变量,一般子树问题会经常用到

原文地址:https://www.cnblogs.com/stAr-1/p/8390636.html