题解 | #树的子结构#
树的子结构
https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?tpId=265&tqId=39228&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D13&difficulty=undefined&judgeStatus=undefined&tags=&title=
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public boolean HasSubtree(TreeNode root1, TreeNode root2) {
if (root1 == null || root2 == null) {
return false;
}
//从root1的根节点开始先找到root1中和root2根节点相同的结点,root1根节点不符合条件,判断root1根节点的左右结 点是否符合,直到遍历完
return dfs(root1, root2) || HasSubtree(root1.left, root2) ||
HasSubtree(root1.right, root2);
}
public boolean dfs(TreeNode root1, TreeNode root2) {
//root2遍历完毕,是子结构
if (root2 == null) {
return true;
}
//root2不为空,root1为空 或者 两个结点不相同 都返回false
if (root1 == null || root1.val != root2.val ) {
return false;
}
//判断它们的左右子节点是否相同
return dfs(root1.left, root2.left) && dfs(root1.right, root2.right);
}
}
SHEIN希音公司福利 280人发布