二叉树-----遍历

Posted lee-yl

tags:

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

一、前序遍历:

递归方式:

def preorder(tree):
    if tree:
        print(tree.val)
        preorder(tree.getLeftChild())
        preorder(tree.getRightChild())

 

非递归方式:时间复杂度O(n),空间复杂度O(n)

技术分享图片

 

def preOrder(head):
    if not head:
        return None
    res ,stack = [] , [head]
    while stack:
        cur = stack.pop()
        res.append(cur.val)
        if cur.right:
            stack.append(cur.right)
        if cur.left:
            stack.append(cur.left)
    return res

二、中序遍历:

递归方式:

def inorder(tree):    
    if tree:
        inorder(tree.left)
        print(tree.val)
        inorder(tree.right)

非递归方式:

技术分享图片

 

def InOrder(head):
    if not head:
        return None
    res ,stack = [] , []
    cur = head
    while stack or cur:
        if cur:
            stack.append(cur)
            cur = cur.left
        else:
            cur = stack.pop()
            res.append(cur.val)
            cur =cur.right
    return res

 

 三、后序遍历:

递归

 

def postorder(tree):
    if tree:
        postorder(tree.left)
        postorder(tree.right))
        print(tree.val)

 

非递归:

技术分享图片

def PosOrder(head):
    if not head:
        return []
    s1 , s2 = [head] , []
    cur = head
    while s1:
        cur = s1.pop()
        s2.append(cur.val)
        if cur.left:
            s1.append(cur.left)
        if cur.right:
            s1.append(cur.right)
    return s2[::-1] 

 技术分享图片

技术分享图片

 

以上是关于二叉树-----遍历的主要内容,如果未能解决你的问题,请参考以下文章

编程实现以上二叉树中序遍历操作,输出遍历序列,求写代码~~

c++二叉树按层序遍历顺序输入(由上到下),先序遍历顺序输出,求完整代码

代码随想录--二叉树

二叉树的非递归遍历怎么写?

二叉树遍历和延伸

二叉树的遍历