二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。
二叉树的创建:
# 创建二叉树节点 class TreeNode(object): # 初始化节点 def __init__(self,data,left_node=None,right_node=None): self.data=data self.left=left_node self.right=right_node # 返回节点信息 def __str__(self): return str(self.data) # 二叉树的输出 def print_tree(node=None,is_child=False,deep=3): # 判断是否有子节点没有时直接返回 if not node and is_child: return # 输出根节点 if is_child ==False: print(node) # 判断节点是否有左右节点 if node.left==None and node.right==None: return print(node.left,node.right) return print_tree(node.left,is_child=True),print_tree(node.right,is_child=True) if __name__ == "__main__": # 定义一个二叉树[8,6,10,5,7,9,11] root = TreeNode(8, TreeNode(6,TreeNode(5),TreeNode(7)), TreeNode(10,TreeNode(9),TreeNode(11)) ) print_tree(root)
二叉树的遍历:
class TreeNode(object): def __init__(self,data,left_node=None,right_node=None): self.data = data self.left = left_node self.right = right_node def __str__(self): return str(self.data) def preorder(node): if node == None: return return print(node),preorder(node.left),preorder(node.right) def mid_order(node): if node == None: return return preorder(node.left),print(node),preorder(node.right) def after_order(node): if node == None: return return preorder(node.left),preorder(node.right),print(node) if __name__ == ‘__main__‘: root = TreeNode(8, TreeNode(6, TreeNode(5), TreeNode(7)), TreeNode(10, TreeNode(9), TreeNode(11)) ) print(‘前序‘) preorder(root) print(‘中序‘) mid_order(root) print(‘后序‘) after_order(root)
二叉树的反转:
class Tree_node(object): def __init__(self,data,left_node=None,right_node=None): self.data = data self.left = left_node self.right = right_node def __str__(self): return str(self.data) def reverse_node(node): if node: node.left,node.right = node.right,node.left if node.left: reverse_node(node.left) if node.right: reverse_node(node.right) return node def print_node(node): if node: print(node.data,end=‘ ‘) print_node(node.left) print_node(node.right) if __name__ == ‘__main__‘: root = Tree_node(8, Tree_node(6,Tree_node(7),Tree_node(5)), Tree_node(10,Tree_node(9),Tree_node(11)) ) node = reverse_node(root) print_node(node)
原文:https://www.cnblogs.com/lizhihoublog/p/12559637.html