一、二叉树子节点个数
#初始化叶子节点和根结点 class treeNode(): def __init__(self,data=-1,left=None,right=None): self.data=data self.left=left self.right=right def __str__(self): return str(self.data) #递归计算包括根节点在内的所有节点个数 def sd_Node(root): if root is None: return 0 else: left=sd_Node(root.left) right=sd_Node(root.right) return left+right+1 #测试 if __name__ == '__main__': root = treeNode(1, treeNode(2, treeNode(9), treeNode(4)), treeNode(5)) sd=sd_Node(root) print(sd)
二、二叉树深度
1 #初始化叶子节点和根结点 2 class treeNode(): 3 def __init__(self,data,left=None,right=None): 4 self.data=data 5 self.left=left 6 self.right=right 7 def __str__(self): 8 return str(self.data) 9 #遍历二叉树的左右分支,比较大小,返回最大的值,即为深度 10 def sd_Node(root): 11 #判断是否为None 12 if root is None: 13 return 0 14 else: 15 #左分支深度 16 left=sd_Node(root.left)+1 17 #右分支深度 18 right=sd_Node(root.right)+1 19 #比较,返回 20 if left > right: 21 return left 22 else: 23 return right 24 if __name__ == '__main__': 25 root = treeNode(1,treeNode(1),treeNode(1)) 26 sd=sd_Node(root) 27 print(sd)
三、二叉树反转
1 #初始化叶子节点和根结点 2 class treeNode(): 3 def __init__(self,data,left=None,right=None): 4 self.data=data 5 self.left=left 6 self.right=right 7 def __str__(self): 8 return str(self.data) 9 #递归反转左右节点 10 def fz_tree(root): 11 if root is None: 12 return 13 else: 14 root.left,root.right=fz_tree(root.right),fz_tree(root.left) 15 return root 16 #前序遍历输出 17 def s_print(root): 18 if root: 19 print(root.data) 20 s_print(root.left) 21 s_print(root.right) 22 #测试 23 if __name__ == '__main__': 24 root = treeNode(1, 25 treeNode(2,treeNode(3),treeNode(4)), 26 treeNode(5,treeNode(6))) 27 rot=fz_tree(root) 28 s_print(rot)