树的子结构
树的子结构
https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?tpId=13
- 先写一个方法,传入两棵根节点值相同的树,判断tree1是否和tree2结构一样
- 再写一个方法来遍历大树,找到一个和小树根节点值相等的节点,以该节点和小树根节点的值为参数调用上面的方法即可
public class Solution { // 递归地在大树上寻找和小树的根节点相同的节点 public boolean HasSubtree(TreeNode root1,TreeNode root2) { if (root1 == null || root2 == null) return false; return HasSubtreeHelper(root1, root2) || HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2); } // 如果找到一个根节点和小树的根节点相同,递归判断大树是否包含小树 public boolean HasSubtreeHelper(TreeNode r1, TreeNode r2) { if(r2 == null) return true; if(r1 == null) return false; if(r1.val != r2.val) return false; return HasSubtreeHelper(r1.left, r2.left) && HasSubtreeHelper(r1.right, r2.right); } }