最近在刷剑指offer,把自己的理解写下来
01 题目
输入两颗二叉树 A和B,判断B是不是A的子结构
如:
A
B
B是A的子结构,B中的节点与A的孩子结构 2,5,6 完全对应。
02 解题
二叉树的每个结点最多有两个子树的树结构。通常左孩子节点,被称为左子树,右孩子节点也可以称为右子树。
判断B是否为A的子树,即要对比B的树结构在A中是否存在,所以我们需要一个对比函数,对比A 节点与B节点是否存在完全相同的树结构。
除此之外,我们还需要定位A中与B根节点相同的节点。
过程如下:
03 代码
判断tree1中是否有节点与tree2的根节点相同
判断tree1的节点是否与tree2的节点完全相同
04 总结
只要想清楚,分两步这道题就很清晰。如果考虑在一个递归里完成,就不容易解出来。另外本体用到了前序遍历二叉树的知识点。前序遍历即,根节点,左孩子节点,右孩子节点的遍历顺序。
测试用例
边界测试:分别输入A节点和B节点为null
普通测试:输入A,B都有节点,B是A的子结构,B不是A的子结构
特殊测试:输入树结构,只有左孩子节点,或者只有右孩子节点。