有两棵树,A和B,判断B是否是A的子树。
如下图左为A,右为B:
1 | 5 |
有两种情况:
- B 可以只是A子树的一部分。那么上例中B是A的子树。
- B 严格是A的子树。那么上例中B不是A的子树。
思路
两种情况主题思路是一样的:
第一步,在A中找与B的根节点一样的结点。先序遍历,如果B的根节点与A的当前结点不同,那么分别考察A的左子树和右子树。
第二步,当在A中找到B的根节点一样的结点R后,判断A以R为树根的子树是否与B相同。此时就要区分上述两种情况了。
实现:
1 | class Solution { |
注意:
- 只要访问一个对象,就要提前判断这个对象是否合法。
- 树的问题绝大数情况是要对数进行遍历,上述问题就是先序遍历。
- 注意递归返回值,返回值是bool型,