二叉树遍历是二叉树的最基本的操作,其实现方式主要有三种:
递归遍历非递归遍历
Morris遍历
二叉树递归遍历的实现非常容易,非递归实现需要用到栈。而Morris算法可能很多人都不太熟悉,其强大之处在于只需要使用O(1)的空间就能实现对二叉树O(n)时间的遍历。
二叉树结点的定义
每个二叉树结点包括一个值以及左孩子和右孩子结点,其定义如下:
#定义二叉树节点
class TreeNode:
"""docstring for ClassName"""
def __init__(self, x):
root.val = x
root.left = None
root.right = None
创建二叉树
#创建二叉树
def creat_tree(root):
element = input("输入值:")
if element = '#':
root = None
else:
root = TreeNode(element)
root.left = creat_tree(root.left)
root.right = creat_tree(root.right)
二叉树的遍历
二叉树的遍历,就是按照某条搜索路径访问树中的每一个结点,使得每个结点均被访问一次,而且仅被访问一次。常见的遍历次序有:
- 先序遍历:先访问根结点,再访问左子树,最后访问右子树
- 中序遍历:先访问左子树,再访问根结点,最后访问右子树
- 后序遍历:先访问左子树,再访问右子树,最后访问根结点