算法(10)拓扑结构相同子树

描述
对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。
给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树。

注意
序列化可以使用先序,中序,后续或者层次遍历。但是需要记录空节点。参考 算法(3)顺序遍历二叉树

算法(10)拓扑结构相同子树_第1张图片
微信图片_20180918003803.png

这个并不能理解为简单的字符是否包含,它是树结构,{1}对应的树其实是1 null null,序列化之后就会发现 1!#!#! 和1!2!...不相等

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;
    }
}*/
public class IdenticalTree {
    public boolean chkIdentical(TreeNode A, TreeNode B) {
        StringBuilder s1 = new StringBuilder("");
        StringBuilder s2 = new StringBuilder("");
        preHander(A,s1);
        preHander(B,s2);
        return s1.toString().contains(s2.toString());
    }
    
    public void preHander(TreeNode root,StringBuilder s){
        if(root == null){
            s.append("#!");
            return;
        }
        s.append(root.val).append("!");
        preHander(root.left,s);
        preHander(root.right,s);
    }
}

你可能感兴趣的:(算法(10)拓扑结构相同子树)