二叉树 —— 创建 + 先序中序后序遍历(递归+非递归)

Posted 叽叽喳喳,嘻嘻哈哈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树 —— 创建 + 先序中序后序遍历(递归+非递归)相关的知识,希望对你有一定的参考价值。

创建如下二叉树:

代码如下
#coding:utf-8


class  Node(object):
    \'\'\'构造节点\'\'\'
    def __init__(self,data=None,lchild=None,rchild=None):
        self.data = data
        self.lchild = lchild
        self.rchild = rchild

class Tree(object):
    
    def __init__(self):
        self.root = Node()

    def addNode(self,data):
        \'\'\'利用队列构造树\'\'\'
        node = Node(data)
        if self.root.data == None:
            self.root = node
        else:
            myqueue =  []
            treeNode = self.root
            myqueue.append(treeNode)
            while myqueue:
                treeNode = myqueue.pop(0)
                if treeNode.lchild == None:
                    treeNode.lchild = node
                    return
                elif treeNode.rchild == None:
                    treeNode.rchild = node
                    return
                else:
                    myqueue.append(treeNode.lchild)
                    myqueue.append(treeNode.rchild)



    def  xianxu_digui(self,root):
        \'\'\'利用递归实现先序遍历\'\'\'
        if root == None:
            return root
        else:
            print(root.data,end=\' \')
            self.xianxu_digui(root.lchild)
            self.xianxu_digui(root.rchild)

    def front_stack(self, root):
        """利用栈实现二叉树的先序遍历"""
        if root == None:
            return
        mystack = []
        node = root
        while node or mystack:
            while node:  # 从根节点开始,一直找它的左子树
                print(node.data, end=\' \')
                mystack.append(node)
                node = node.lchild
            node = mystack.pop()  #
            node = node.rchild  #




    def zhongxu_digui(self,root):
        \'\'\'利用递归实现中序遍历\'\'\'
        if root == None:
            return root
        else:
            self.zhongxu_digui(root.lchild)
            print(root.data,end=\' \')
            self.zhongxu_digui(root.rchild)

    def midd_stack(self, root):
        \'\'\'利用栈实现中序遍历\'\'\'
        if root == None:
            return
        mystack = []
        node = root
        while node or mystack:
            while node:
                mystack.append(node)
                node = node.lchild
            node = mystack.pop()
            print(node.data, end=\' \')
            node = node.rchild


    def houxu_digui(self,root):
        \'\'\'利用递归实现后序遍历\'\'\'
        if root == None:
            return
        else:
            self.houxu_digui(root.lchild)
            self.houxu_digui(root.rchild)
            print(root.data,end=\' \')


    def later_stack(self, root):
        """利用栈实现后序遍历"""
        if root == None:
            return
        mystack1 = []  # mystack1 这是一个中介栈,目的是调整进mystack2 栈的顺序。
        mystack2 = []  #该栈里面的元素是 逆序的倒序,逐个弹出,访问
        node = root
        mystack1.append(node)
        while mystack1:
            node = mystack1.pop()
            mystack2.append(node)
            if node.lchild:
                mystack1.append(node.lchild)
            if node.rchild:
                mystack1.append(node.rchild)

        while mystack2:  # 将mystack2中的元素逐个弹出,即为后序遍历次序
            print(mystack2.pop().data,end=\' \')


    def leve_queue(self,root):
        \'\'\'按层遍历\'\'\'
        if root == None:
            return
        else:
            myqueue = []
            node = root
            myqueue.append(root)
            while myqueue:
                node = myqueue.pop(0)
                print(node.data,end=\' \')
                if node.lchild:
                    myqueue.append(node.lchild)
                if node.rchild:
                    myqueue.append(node.rchild)


tree = Tree()
tree.addNode(1)
tree.addNode(2)
tree.addNode(3)
tree.addNode(4)
tree.addNode(5)
tree.addNode(6)
tree.addNode(7)
tree.addNode(8)
tree.addNode(9)
tree.addNode(10)
#
print(\'先序遍历\')
tree.xianxu_digui(tree.root)
print(\'\\n\')
tree.front_stack(tree.root)
print(\'\\n\')
print(\'中序遍历 \')
tree.zhongxu_digui(tree.root)
print(\'\\n\')
tree.midd_stack(tree.root)
print(\'\\n\')
print(\'后序遍历\')
tree.houxu_digui(tree.root)
print(\'\\n\')
tree.later_stack(tree.root)
print(\'\\n\')
print(\'层次遍历\')
tree.leve_queue(tree.root)
View Code

 

以上是关于二叉树 —— 创建 + 先序中序后序遍历(递归+非递归)的主要内容,如果未能解决你的问题,请参考以下文章

二叉树遍历(先序中序后序)

C语言数据结构,急求在线二叉树先序中序后序递归遍历

二叉树问题:递归方式实现二叉树先序中序后序遍历

二叉树先序中序后序遍历 递归与非递归 Python实现

二叉树先序中序后序遍历 递归与非递归 Python实现

二叉树的非递归遍历(先序中序后序和层序遍历)