python 二叉树

class BinaryTreeNode():
    # 二叉树节点
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


def generate_tree(arr):
    # input:数组
    # output:二叉树首节点
    if not arr:
        return
    # 原数组上修改
    arr[0] = BinaryTreeNode(arr[0])
    for i in range(1, len(arr)):
        # print('----arr[i]', i, arr[i])
        if arr[i] is not None:
            arr[i] = BinaryTreeNode(arr[i])
        # print('\t', i & 1, i // 2, arr[i])
        # 利用二叉树的节点位置和其左子树右子树位置的关系
        # 节点A的位置是n,则左节点是2n,右节点是2n + 1
        if i & 1 == 1:
            # 奇数:是左节点
            arr[(i -1) // 2].left = arr[i]
        else:
            # 偶数:是右节点
            arr[(i -1) // 2].right = arr[i]

    return arr[0]


def look_tree(root):
    # 遍历打印二叉树
    if not root:
        return
    print("look_tree start")
    # 层序遍历
    stack = [root]
    while stack:
        tmp = stack.pop(0)
        print("\tlook: ", tmp.val)

        if tmp.val is None:
            continue
        if tmp.left:
            stack.append(tmp.left)
        if tmp.right:
            stack.append(tmp.right)
    print("look_tree finish")
        
look_tree(generate_tree([1,2,5,3,4,None,6]))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值