zoukankan      html  css  js  c++  java
  • 二叉树前序遍历&后续遍历&中序遍历

    class BiTNode():
        def __init__(self):
            self.data = None
            self.lchild = None
            self.rchild = None
    
    # 方法功能:把有序数组转为二叉树
    def arraytotree(arr,start,end):
        root = None
        if end >= start:
            root = BiTNode()
            mid = (start+end+1)//2
            # 树的根节点为数组中间的元素
            root.data = arr[mid]
            print(root.data)
            # 递归的用左半部分数组构成 root 的左子树
            root.lchild = arraytotree(arr,start,mid-1)
            # 递归地用右半部分数组构成 root 的右子树
            root.rchild = arraytotree(arr,mid+1,end)
        else:
            root = None
        return root
    
    # 用中序遍历的方法打印出二叉树结点的内容
    def printTreeMidOrder(root):
        if root == None:
            return None
        #遍历root结点的左子树
        if root.lchild != None:
            printTreeMidOrder(root.lchild)
        #遍历root结点
        print(root.data,end=' ')   #先从左边遍历
        #遍历 root 的右子树
        if root.rchild != None:
            printTreeMidOrder(root.rchild)
    
    #前序遍历
    def printTreePreOrder(root):
        if root == None:
            return None
        #遍历root结点
        print(root.data,end=' ')
        #遍历root结点的左子树
        if root.lchild != None:
            printTreeMidOrder(root.lchild)
        #遍历 root 的右子树
        if root.rchild != None:
            printTreeMidOrder(root.rchild)
    
    #后序遍历
    def printTreeAfterOrder(root):
        if root == None:
            return None
        #遍历root结点的左子树
        if root.lchild != None:
            printTreeMidOrder(root.lchild)
        #遍历 root 的右子树
        if root.rchild != None:
            printTreeMidOrder(root.rchild)
        #遍历root结点
        print(root.data,end=' ')   
    
    arr = [1,2,3,4,5,6,7,8,9,10]
    print("数组:",end='')
    i = 0
    while i < len(arr):
        print(arr[i],end = ' ')
        i += 1
    print()
    root = arraytotree(arr,0,len(arr)-1)
    print("转换成树的中序遍历为:",end='')
    printTreeMidOrder(root)
  • 相关阅读:
    集成信鸽推送!!!
    URI跳转方式地图导航的代码实践
    CocoaPods 的详细使用教程
    学习如何学习
    代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧
    宏!!!!(拷贝别人的博客的只为了收藏)
    不修改Xcode项目加载Reveal
    关于开发中的常用手段(个人建议)
    ios高级-属性中Copy的使用
    iOS高级-RunLooper
  • 原文地址:https://www.cnblogs.com/sunny0824/p/13677606.html
Copyright © 2011-2022 走看看