20180703剑指offer题18——树的子结构

一、要求

    判断一棵树tree2是不是另一棵树tree1的子结构,空树不是任意一个树的子结构。

二、思路及代码

需要进行的判断:

1.都不是None,判断val,再进一步判断(左右进一步看val,或者左右重新判断)

2.tree1是空而tree2非空 ,return false

3.tree2已是空,return true

4.一开始就遇到空节点val==None:不论是tree1还是tree2 return false。

class TreeNode:
    def __init__(self,value=None):
        self.val=value
        self.left=None
        self.right=None

def solution(tree1,tree2):
    if tree1 and tree2:#判断1:都不是None,判断val,再进一步判断(左右进一步看val,或者左右重新判断)
        if tree1.val==None or tree2.val==None:#判断4:遇到空节点,tree1 为空,tree2不可能是它的子树;tree2为空,空树不是任何树的子树
            return False
        if tree1.val==tree2.val:
            return solution(tree1.left,tree2.left) and solution(tree1.right,tree2.right)
        else:
            return solution(tree1.left,tree2) or solution(tree1.right,tree2)
    if not tree1 and tree2:#判断2:tree1是空而tree2非空 ,return false
        return False
    return True #判断3:tree2已是空,return true

def main():
    #建立tree1
    node1=TreeNode(1)
    node2=TreeNode(2)
    node3=TreeNode(3)
    node4=TreeNode(4)
    node5=TreeNode(5)
    node6=TreeNode(6)
    node1.left=node2
    node1.right=node3
    node3.right = node6
    node2.left = node4
    node2.right = node5
    #  建立tree2
    node7=TreeNode(2)
    node8=TreeNode(5)
    node7.right = node8
    #建立tree3
    node9=TreeNode(3)
    node10=TreeNode(7)
    node9.left=node10
    #建立空树tree4
    node11=TreeNode()
    print(solution(node1,node7))
    print(solution(node1,node9))
    print(solution(node1,node11))

if __name__=='__main__':
    main()


三、运行结果

True
False
False


四、思考与总结

True False None都是大写开头
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值