python 二叉树构造及遍历
二叉树概述
二叉树(Binary tree) 是一种树状结构,每个节点最多有两个子树,并且分为左、右两个子树。
二叉树python构建
class TreeNode(object):
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
if __name__ == '__main__':
G = TreeNode('g')
F = TreeNode('f')
E = TreeNode('e')
D = TreeNode('d')
C = TreeNode(data='c', left=F, right=G)
B = TreeNode(data='b', left=D, right=E)
A = TreeNode(data='a', left=B, right=C)
二叉树前序遍历
前序遍历顺序:
根节点 —>左节点—>右节点
实现概述:
先访问每个根节点,继而访问左节点,最后是右节点,
1.那么只要先打印每个节点的根节点。
2.然后递归左节点,此时左节点变为根节点,打印此节点,继续递归左节点打印。
3.最后递归右节点,此时右节点变为根节点,打印此节点,继续递归右节点打印。
class TreeNode(object):
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def preorder(Node):
print(Node.data)
if Node.left is not None:
preorder(Node.left)
if Node.right is not None:
preorder(Node.right)
if __name__ == '__main__':
G = TreeNode('g')
F = TreeNode('f')
E = TreeNode('e')
D = TreeNode('d')
C = TreeNode(data='c', left=F, right=G)
B = TreeNode(data='b', left=D, right=E)
A = TreeNode(data='a', left=B, right=C)
preorder(A)
二叉树中序遍历
中序遍历顺序:
左节点 —>根节点—>右节点
实现概述:
先访问每个左节点,继而访问根节点,最后是右节点,
1.先递归左节点,找到最左节点。
2.打印根节点(此时已在最左节点,所以打印根节点即可)
3.最后递归右节点。
class TreeNode(object):
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def inorder(Node):
if Node.left is not None:
inorder(Node.left)
print(Node.data)
if Node.right is not None:
inorder(Node.right)
if __name__ == '__main__':
G = TreeNode('g')
F = TreeNode('f')
E = TreeNode('e')
D = TreeNode('d')
C = TreeNode(data='c', left=F, right=G)
B = TreeNode(data='b', left=D, right=E)
A = TreeNode(data='a', left=B, right=C)
inorder(A)
二叉树后序遍历
中序遍历顺序:
左节点 —>右节点—>根节点
实现概述:
先访问每个左节点,继而访问右节点,最后是根节点,
1.先递归左节点,找到最左节点。
2.继而递归右节点
3.最后打印该节点。
class TreeNode(object):
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def postorder(Node):
if Node.left is not None:
postorder(Node.left)
if Node.right is not None:
postorder(Node.right)
print(Node.data)
if __name__ == '__main__':
G = TreeNode('g')
F = TreeNode('f')
E = TreeNode('e')
D = TreeNode('d')
C = TreeNode(data='c', left=F, right=G)
B = TreeNode(data='b', left=D, right=E)
A = TreeNode(data='a', left=B, right=C)
postorder(A)