题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
非递归版本
- 首先遍历A,对其每个节点node用check函数判断其能否对应B的根节点rB,并且B是A的子结构。
- check函数,遍历B,并以B为标准从rB和node核对,B有的结构A也要有,对应节点的值也要相等。
- 一旦核对不上,返回False。
- 直到B遍历结束,返回True。
- 至于遍历顺序是先根、后根、中根(递归,或者用栈),或者层次遍历(用到了队列),都无所谓。
1 | class Solution: |
递归版本
- 巧用逻辑短路规则
1 | def HasSubtree(p1, p2): |