二叉树构造和遍历

 

手敲下二叉树

#coding=utf-8

class Node(object):
    def __init__(self, ele=1, left=None, right=None):
        self.ele = ele
        self.l = left
        self.r = right


class BinaryTree(object):
    def __init__(self, root=None):
        self.root = root

    def add(self, ele):
        node=Node(ele=ele)

        if self.root == None:
            self.root = node
        else:
            queue = [self.root]

            while queue:
                cur = queue.pop(0)
                if cur.l == None:
                    cur.l = node
                    return
                if cur.r == None:
                    cur.r = node
                    return
                queue.append(cur.l)
                queue.append(cur.r)

    def breath_tral(self):
        if self.root == None:
            print('空树')
            return
        else:
            queue = [self.root]
            while queue:
                cur = queue.pop(0)
                print(cur.ele)
                if cur.l != None: queue.append(cur.l)
                if cur.r != None: queue.append(cur.r)

    def pre_tral(self, cur):
        if cur == None:
            return
        else:
            print(cur.ele)
            self.pre_tral(cur.l)
            self.pre_tral(cur.r)

    def mid_tral(self, cur):
        if cur == None:
            return
        else:
            self.mid_tral(cur.l)
            print(cur.ele)
            self.mid_tral(cur.r)

    def post_tral(self, cur):
        if cur == None:
            return
        else:
            self.post_tral(cur.l)
            self.post_tral(cur.r)
            print(cur.ele)


if __name__ == "__main__":
    tree = BinaryTree()
    tree.add(1)
    tree.add(2)
    tree.add(3)
    tree.add(5)
    tree.add(6)
    tree.add(7)
    tree.add(8)
    # tree.breath_tral()
    # tree.pre_tral(tree.root)
    tree.post_tral(tree.root)

二叉树的性质: 

  1. 二叉树有以下几个性质:TODO(上标和下标)
    性质1:二叉树第i层上的结点数目最多为 2{i-1} (i≥1)。
    性质2:深度为k的二叉树至多有2{k}-1个结点(k≥1)。
    性质3:包含n个结点的二叉树的高度至少为log2 (n+1)。
    性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1。

  2. 定义:高度为h,并且由2{h} –1个结点的二叉树,被称为满二叉树。

  3. 完全二叉树

    定义:一棵二叉树中,只有最下面两层结点的度可以小于2,并且最下一层的叶结点集中在靠左的若干位置上。这样的二叉树称为完全二叉树。

图片来自:http://www.cnblogs.com/skywang12345/p/3576328.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值