最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 面向对象之深度优先和广度优先

    正文概述    2020-06-03   246

    面向对象之深度优先和广度优先

    面向对象深度优先和广度优先是什么?

    面向对象之深度优先和广度优先

    面向对象之深度优先和广度优先

    相关推荐:《Python视频教程》

    面向对象之深度优先和广度优先

    面向对象之深度优先和广度优先

    二叉树的两种遍历是数据结构的经典考察题目, 广度遍历考察队列结构, 深度遍历考察递归

    面向对象之深度优先和广度优先

    深度优先

    先序遍历(父, 左子, 右子) 0, 1, 3, 7, 8, 4, 9, 2, 5, 6
    中序遍历(左子, 父, 右子) 7, 3, 8, 1, 9, 4, 0, 5, 2, 6
    后序遍历(左子, 右子, 父) 7, 8, 3, 9, 4, 1, 5, 6, 2, 0

    "深度优先遍历"考察递归, 将子节点为空作为终止递归的条件

    相关推荐:《Python视频教程》

    广度优先

    "广度优先遍历"考察队列的结构, 消除父节点(出队列,顺便打印), 添加子节点(进队列),当队列内元素个数为零, 完成遍历

    添加元素

    面向对象之深度优先和广度优先

    广度优先遍历

    面向对象之深度优先和广度优先

    深度优先

    面向对象之深度优先和广度优先

    面向对象之深度优先和广度优先

    面向对象之深度优先和广度优先

    Python3 实现

    class Node(object):
        """初始化一个节点,需要为节点设置值"""
        def __init__(self, val):
            self.val = val
            self.left = None
            self.right = None
    class BinaryTree(object):
        """
        创建二叉树,完成
        - 添加元素
        - 广度遍历
        - 深度遍历(先序遍历, 中序遍历, 后序遍历)
        """
        def __init__(self):
            self.root = None
            pass
        # 添加元素
        def addNode(self, val):
            # 创建队列结构存储结点
            nodeStack = [self.root,]
            # 如果根结点为空
            if self.root == None:
                self.root = Node(val)
                print("添加根节点{0}成功!".format(self.root.val))
                return
            while len(nodeStack) > 0:
                # 队列元素出列
                p_node = nodeStack.pop()
                # 如果左子结点为空
                if p_node.left == None:
                    p_node.left = Node(val)
                    print("添加左:{0} ".format(p_node.left.val))
                    return
                # 如果右子节点为空
                if p_node.right == None:
                    p_node.right = Node(val)
                    print("添加右:{0} ".format(p_node.right.val))
                    return
                nodeStack.insert(0, p_node.left)
                nodeStack.insert(0, p_node.right)
        # 广度遍历(中序: 先读父节点,再读左子节点, 右子节点)
        def breadthFirst(self):
            nodeStack = [self.root, ];
            while len(nodeStack) > 0:
                my_node = nodeStack.pop()
                print("-->",my_node.val)
                if my_node.left is not None:
                    nodeStack.insert(0, my_node.left)
                if my_node.right is not None:
                    nodeStack.insert(0, my_node.right)
        # 深度优先(先序遍历)
        def preorder(self, start_node):
            if start_node == None:
                return
            print(start_node.val)
            self.preorder(start_node.left)
            self.preorder(start_node.right)
        # 深度优先(中序遍历)
        def inorder(self, start_node):
            if start_node == None:
                return
            self.inorder(start_node.left)
            print(start_node.val)
            self.inorder(start_node.right)
        # 深度优先(后序遍历)
        def outorder(self, start_node):
            if start_node == None:
                return
            self.outorder(start_node.left)
            self.outorder(start_node.right)
            print(start_node.val)
    def main():
        bt = BinaryTree()
        bt.addNode(0)
        bt.addNode(1)
        bt.addNode(2)
        bt.addNode(3)
        bt.addNode(4)
        bt.addNode(5)
        bt.addNode(6)
        bt.addNode(7)
        bt.addNode(8)
        bt.addNode(9)
        print("广度遍历-->")
        bt.breadthFirst()
        
        print("先序遍历-->")
        bt.preorder(bt.root)
        print("中序遍历-->")
        bt.inorder(bt.root)
        
        print("后序遍历-->")
        bt.outorder(bt.root)
    if __name__ == '__main__':
        main()

    下载网 » 面向对象之深度优先和广度优先

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元