572. 另一棵树的子树
难度简单556 收藏 分享 切换为英文 接收动态 反馈
给你两棵二叉树 root
和 subRoot
。检验 root
中是否包含和 subRoot
具有相同结构和节点值的子树。如果存在,返回 true
;否则,返回 false
。
二叉树 tree
的一棵子树包括 tree
的某个节点和这个节点的所有后代节点。tree
也可以看做它自身的一棵子树。
/**
- Definition for a binary tree node.
- public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
- }
*/
思路:
把二叉树序列化,然后判断sub序列化后的字符串m是否在root序列化后的字符串n中
代码:
class Solution {
public boolean isSubtree(TreeNode root, TreeNode subRoot) {
String rootS = postSerialize(root);
String subS = postSerialize(subRoot);
return rootS.contains(subS);
}
private String postSerialize(TreeNode node){
StringBuilder sb = new StringBuilder();
postSerialize(node,sb);
return sb.toString();
}
//后序遍历
private void postSerialize(TreeNode node,StringBuilder sb){
if(node.left == null){
sb.append("#").append("!");
}else{
postSerialize(node.left,sb);
}
if(node.right == null){
sb.append("#").append("!");
}else{
postSerialize(node.right,sb);
}
sb.append(node.val).append("!");
}
}
网友评论