zoukankan      html  css  js  c++  java
  • python二叉树的遍历,递归和非递归及相关其它

    # encoding=utf-8
    class node(object):
    def __init__(self,data,left=None,right=None):
    self.data = data
    self.left = left
    self.right = right

    tree = node('D',node('B',node('A'),node('C')),node('E',right=node('G',node('F'))))

    # 先序
    def front(tree):
    if tree == None:
    return
    print(tree.data)
    front(tree.left)
    front(tree.right)

    def front_not(tree):
    if tree == None:
    return
    stack = []
    node = tree
    while node or stack:
    while node:
    print(node.data)
    stack.append(node)
    node = node.left
    node = stack.pop()
    node = node.right

    # 中序遍历
    def mid(tree):
    if tree == None:
    return
    mid(tree.left)
    print(tree.data)
    mid(tree.right)

    def mid_not(tree):
    if tree == None:
    return
    stack = []
    node = tree
    while node or stack:
    while node:
    stack.append(node)
    node = node.left
    node = stack.pop()
    print(node.data)
    node = node.right

    # 后序遍历
    def post(tree):
    if tree == None:
    return
    post(tree.left)
    post(tree.right)
    print(tree.data)

    def post_not(tree):
    if tree == None:
    return
    stack1 = []
    stack2 = []
    node = tree
    stack1.append(node)
    while stack1:
    node = stack1.pop()
    if node.left:
    stack1.append(node.left)
    if node.right:
    stack1.append(node.right)
    stack2.append(node)
    while stack2:
    print(stack2.pop().data)

    # 队列
    def leval(tree):
    if tree == None:
    return
    queue = []
    node = tree
    queue.append(node)
    while queue:
    node = queue.pop(0)
    print(node.data)
    if node.left:
    queue.append(node.left)
    if node.right:
    queue.append(node.right)
    # deep二叉树深度
    def deepth(tree):
    if tree == None:
    return 0
    left = deepth(tree.left)
    right = deepth(tree.right)
    return max(left,right)+1

    # print(deepth(tree))

    # 节点数
    def jiedian(tree):
    if tree == None:
    return 0
    return jiedian(tree.left)+jiedian(tree.right)+1

    # print(jiedian(tree))

    # 叶子节点
    def leaf(tree):
    if tree == None:
    return 0
    if tree.left == None and tree.right == None:
    return 1
    return leaf(tree.left)+leaf(tree.right)
    print(leaf(tree))


  • 相关阅读:
    JWT攻击
    CTF中的RSA 算法
    PHP反序列化字符逃逸
    记一次代码审计 [De1CTF 2019]SSRF Me
    BUU 思路记录(更新中
    日志注入漏洞
    docker 常用命令
    [HITCON 2017]SSRFme
    xss 19道题目
    BUUCTF之[EIS 2019]EzPOP&BUUCTF[2020 新春红包题]1 web
  • 原文地址:https://www.cnblogs.com/dreamyu/p/8276495.html
Copyright © 2011-2022 走看看