美文网首页
剑指offer--algorithm8

剑指offer--algorithm8

作者: strive鱼 | 来源:发表于2018-05-11 16:31 被阅读0次

今天的两道题主要侧重于树的结构,树相对于链表来说指针更多,因此难度会更大点,需要好好掌握

题16--树的子结构

输入两棵树A,B,判断B是不是A的子结构,其中空树不是任意树的子结构

关于本题的思路就是找A中与B中相同的节点,思路如下:

image.png
image.png
image.png
本题的关键在于递归的使用,以及树的构建(与链表类似)

下面为代码和注释部分

class tree(object):
    def __init__(self,value):
        self.value=value
        self.left=None
        self.right=None#这个与链表一样,类似于设定两个指针
        
        

class solution(object):
    def result_decision(self,ptree1,ptree2):
        result=False#首先建立flag 
        if ptree1!=None and ptree2!=None:#当确定两者都不为空的时候
            if ptree1.value==ptree2.value:#当两个树的根节点就相同
                result=self.subtree(ptree1,ptree2)
            if not result:
                self.result_decision(ptree1.left,ptree2)#当没有检测到节点相等的时候,那么就继续遍历大树1与小树2的节点进行比较
            if not result:
                self.result_decision(ptree1.right,ptree2)#当没有检测到节点相等的时候,那么就继续遍历大树1与小树2的节点进行比较
        return result 
    def subtree(self,ptree1,ptree2):
        if ptree2==None:
            return True#当树2遍历结束后,说明树2肯定为树1的子树,所以返回True
        if ptree1==None:#当树1遍历结束后,此时说明,肯定树2不为树1的子树,所以返回False,这两个If语句不能相反
            return False
        if ptree1.value!=ptree2.value:
            return False 
        
        return self.subtree(ptree1.left,ptree2.left) and self.subtree(ptree1.right,ptree2.right)
    
    
    
    
def main():
    ptree1=tree(8)
    ptree2=tree(8)
    ptree3=tree(7)
    ptree4=tree(9)
    ptree5=tree(2)
    ptree6=tree(4)
    ptree7=tree(7)
    ptree1.left=ptree2
    ptree1.right=ptree3
    ptree2.left=ptree4
    ptree2.right=ptree5
    ptree5.left=ptree6
    ptree5.right=ptree7
    
    
    ptree8=tree(8)
    ptree9=tree(9)
    ptree10=tree(2)
    ptree8.left=ptree9
    ptree8.right=ptree10
    s=solution()
    print (s.result_decision(ptree1,ptree8))
    
    
if __name__=='__main__':
    main()

题17--二叉树镜像

输入一个二叉树,然后输出该二叉树的镜像

首先要了解一下树的镜像概念


image.png

那么如何的一种交换思路呢?


image.png

该思路的描述是


image.png
下面为代码和解释部分
class tree(object):
    def __init__(self,value):
        self.value=value
        self.left=None 
        self.right=None 
        


class solution(object):
    def mirror(self,root):
        if root==None:
            return 
        if root.left==None and root.right==None:
            return root 
        ptemp=root.left 
        root.left=root.right 
        root.right=ptemp 
        
        self.mirror(root.left)
        self.mirror(root.right)
   
            
            
def main():
    node1=tree(8)
    node2=tree(6)
    node3=tree(10)
    node4=tree(5)
    node5=tree(7)
    node6=tree(9)
    node7=tree(11)
    
    node1.left=node2
    node1.right=node3
    node2.left=node4
    node2.right=node5
    node3.left=node6
    node3.right=node7
    s=solution()
    print (s.mirror(node1))
    
    
    
if __name__=='__main__':
    main()

相关文章

  • 剑指offer--algorithm8

    今天的两道题主要侧重于树的结构,树相对于链表来说指针更多,因此难度会更大点,需要好好掌握 题16--树的子结构 关...

  • 剑指

    遥望中原九点烟,风云直上七重天。 今朝再向江湖去,一剑流星谁比肩? 2011.10(1488)

  • 剑指

    1. 二维数组中查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照...

  • 全网最全剑指offer题目解答

    【剑指offer】Java版代码(完整版) 【剑指offer】1-10题 【剑指offer】11-20题 【剑指o...

  • 剑指offer

    第一题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,...

  • 剑指BAT

    Android工作5年半了,一毕业就开始做这行。在现在这家公司工作了3年整,最近有换工作的打算,所以在猎聘...

  • 《剑指offer》

    4.调整数组顺序使奇数位于偶数前面 题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇...

  • 气剑指

    “聚气于指尖,凝其成剑,利可断金。”牢头对身边的狱卒说。 只见牢头举起的右手指尖逐渐变红,转而变白,隐隐发出音量很...

  • 剑指offer

    二维数组中查找数在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到...

  • 剑指苍穹

    逆天命,斩苍穹,吾乃修士,率性而为!《剑指苍穹》是一款逍遥仙侠MMORPG——群魔阻道,斩群魔;妖邪拦路,诛妖邪,...

网友评论

      本文标题:剑指offer--algorithm8

      本文链接:https://www.haomeiwen.com/subject/xhnxdftx.html