zoukankan      html  css  js  c++  java
  • 剑指offer python版 树的子结构

    from collections import deque
    
    
    class TreeNode(object):
        def __init__(self, x):
            self.val = x
            self.left = None
            self.right = None
    
    
    class Tree(object):
        def __init__(self):
            self.root = None
    
        def construct_tree(self, values=None):
            if not values:
                return None
            self.root = TreeNode(values[0])
            queue = deque([self.root])
            leng = len(values)
            nums = 1
            while nums < leng:
                node = queue.popleft()
                if node:
                    node.left = TreeNode(values[nums]) if values[nums] else None
                    queue.append(node.left)
                    if nums + 1 < leng:
                        node.right = TreeNode(values[nums + 1]) if values[nums + 1] else None
                        queue.append(node.right)
                        nums += 1
                    nums += 1
    
        def bfs(self):
            ret = []
            queue = deque([self.root])
            while queue:
                node = queue.popleft()
                if node:
                    ret.append(node.val)
                    queue.append(node.left)
                    queue.append(node.right)
            return ret
    
        def pre_traversal(self):
            ret = []
    
            def traversal(head):
                if not head:
                    return
                ret.append(head.val)
                traversal(head.left)
                traversal(head.right)
    
            traversal(self.root)
            return ret
    
        def in_traversal(self):
            ret = []
    
            def traversal(head):
                if not head:
                    return
                traversal(head.left)
                ret.append(head.val)
                traversal(head.right)
    
            traversal(self.root)
            return ret
    
        def post_traversal(self):
            ret = []
    
            def traversal(head):
                if not head:
                    return
                traversal(head.left)
                traversal(head.right)
                ret.append(head.val)
    
            traversal(self.root)
            return ret
    
    
    def sub_tree(tree1, tree2):
        if tree1 and tree2:
            if tree1.val == tree2.val:
                return sub_tree(tree1.left, tree2.left) and sub_tree(tree1.right, tree2.right)
            else:
                return sub_tree(tree1.left, tree2) or sub_tree(tree1.right, tree2)
        if not tree1 and tree2:
            return False
        return True
    
    
    if __name__ == '__main__':
        t1 = Tree()
        t1.construct_tree([1, 2, 3, 4, 5])
        print t1.bfs()
        t2 = Tree()
        t2.construct_tree([2, 4, 5])
        print t2.bfs()
    print sub_tree(t1.root, t2.root)
  • 相关阅读:
    如何在fragment里面嵌套viewpager?
    textview限制字数,结尾显示。。。。。
    限制imageview大小
    iOS开发核心动画之画图板
    iOS开发核心动画之九宫格解锁
    iOS开发核心动画之Quartz2D绘图
    iOS开发核心动画之触摸手指识别
    iOS开发网络多线程之断点下载
    iOS开发网络多线程之网络请求文件解析
    iOS开发网络多线程之Runloop无限循环
  • 原文地址:https://www.cnblogs.com/xzm123/p/9875216.html
Copyright © 2011-2022 走看看