数据结构与算法笔记(十四)—— 二叉树

一、二叉树的基本概念

二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree) 和“右子树”(right subtree)。


二、二叉树的性质(特性)

性质 1: 在二叉树的第 i 层上至多有 2^(i-1)个节点(i>0)

性质 2: 深度为 k 的二叉树至多有 2^k - 1 个节点(k>0)

性质 3: 对于任意一棵二叉树,如果其叶节点数为 N0,而度数为 2 的结点总数为 N2, 则 N0=N2+1;

性质 4:具有 n 个节点的完全二叉树的深度必为 log2(n+1) (以2为底)

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


三、二叉树的节点及树的创建

3.1、节点的创建

class Node(object): 
    """节点类""" 
    def __init__(self, elem=-1, lchild=None, rchild=None): 
        self.elem = elem 
        self.lchild = lchild 
        self.rchild = rchild

3.2、树的创建

class Tree(object):
	'''树类'''
    def __init__(self):
        self.root = None

    def add(self,elem):
        '''为树添加结点'''
        node = Node(elem)
        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 = None
                return
            else:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值