二叉树
#-*- coding:utf-8 -*- """ 二叉树:二叉树是由n(n≥0)个结点组成的有限集合、每个结点最多有两个子树的有序树。它或者是空集,或者是由 一个根和称为左、右子树的两个不相交的二叉树组成。 特点: (1)二叉树是有序树,即使只有一个子树,也必须区分左、右子树; (2)二叉树的每个结点的度不能大于2,只能取0、1、2三者之一; (3)二叉树中所有结点的形态有5种:空结点、无左右子树的结点、只有左子树的结点、只有右子树的结点 和具有左右子树的结点。 """ # 二叉树的基本结构 class BinTNode: def __init__(self,dat,left=None,right=None): self.data = dat self.left = left self.right = right class Btree(object): def __init__(self,root = 0): self.root = root t = BinTNode(1,BinTNode(2),BinTNode(3)) # 基于BinTNode构造的二叉树具有递归结构,很容易采用递归的方式处理; # 统计树中节点的个数 def count_BinTNodes(t): if t is None: return 0 else: return 1+count_BinTNodes(t.left)+count_BinTNodes(t.right) # 假设节点中都有数值,求所有节点的数值的和 def sum_BinTNodes(t): if t is None: return 0 else: return t.dat + sum_BinTNodes(t.left) + sum_BinTNodes(t.right) # 遍历算法 """ 深度遍历算法:包括中序遍历、先序遍历、后续遍历 广度遍历算法 """ #先序 def preOrder(t, proc): if t is 0: return proc(t.data) preOrder(t.left) preOrder(t.right) #中序 def inOrder(t, proc): if t is 0: return inOrder(t.left) proc(t.data) inOrder(t.right) #后序 def postOrder(t, proc): if t is 0: return inOrder(t.left) inOrder(t.right) proc(t.data)
#求最大树深
def maxDepth(t):
if not t:
return 0
else:
return max(maxDepth(t.left),maxDepth(t.right))+1
#求两棵树是否相同
def isSameTree(p, q):
if p == None and q == None:
return True
elif p and q :
return p.val == q.val and isSameTree(p.left,q.left) and isSameTree(p.right,q.right)
else :
return False