首页 > 编程语言 > 详细

python笔记-算法及数据结构6

时间:2019-09-08 20:50:15      阅读:87      评论:0      收藏:0      [点我收藏+]

1 二叉树的性质

    ① 在二叉树的第i层至多有2^(i-1)个节点

    ② 深度为k的二叉树至多有2^k-1个节点

    ③ 对于任意一颗二叉树,如果其叶子节点数为N0,而度数为2的节点总数为N2,则N0=N2+1

    ④ 具有n个节点的完全二叉树的深度必为log2(n+1)

    ⑤ 对完全二叉树,若从上至下,从左至右编号,则编号为i的结点,其左孩子编号必为2i,其右孩子编号必为2i+1,其双亲的编号必为i/2(i=1时为根,除外)

2 二叉树的实现

    二叉树的实现与链表类似,由节点构成,每个节点包含1个数值及左右两个连接点。

class Node(object):

    def __init__(self,item):

        self.item=item

        self.lchild=None

        self.rchild=None

 

class DoubleTree(object):

    def __init__(self):

        self.root=None
 

    def add(self, item):

        node=Node(item)

        if(self.root is None):

            self.root=node

            return

        queue=[self.root]

        while queue:

            cur_node=queue.pop(0)

            if(cur_node.lchild is None):

                cur_node.lchild=node

                return

            else:

                queue.append(cur_node.lchild)

            if(cur_node.rchild is None):

                cur_node.rchild=node

                return

            else:

                queue.append(cur_node.rchild)

 
    def travel(self):

        if(self.root is None):

            return

        queque=[self.root]

        while queque:

            cur_node=queque.pop(0)

            print(cur_node.item)

            if (cur_node.lchild is not None):

                queque.append(cur_node.lchild)

            if (cur_node.rchild is not None):

                queque.append(cur_node.rchild)

 

3 二叉树的遍历

    二叉树的遍历可以从广度及深度两个方向进行,上面2中介绍了广度上的遍历,深度遍历包括三种方式:先序遍历、中序遍历和后序遍历。遍历中用到了递归方法。

   

 def xianxu(self,node):

        if(node is None):

            return

        print(node.item)

        self.xianxu(node.lchild)

        self.xianxu(node.rchild)

 

python笔记-算法及数据结构6

原文:https://www.cnblogs.com/zhuome/p/11487825.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!