二叉树
二叉树性质
性质1: 在二叉树的第i层上至多有2(i-1)个结点(i>0) 性质2: 深度为k的二叉树至多有2k-1个结点(k>0) 性质3: 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1 ; 性质4:具有n个结点的完全二叉树的深度必为 log2(n+1) 性质5:对完全二叉树,若从上至下、从左至右编号,则编号为i 的结点,其左孩子编号必为2i ,其右孩子编号必为2i+1 ;其双亲的编号必为i//2 (i=1 时为根,除外)
(1)完全二叉树若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。 (2)满二叉树除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。
遍历
先序
def preorder(self, root):
"""递归实现先序遍历"""
if root == None:
return
print root.elem
self.preorder(root.lchild)
self.preorder(root.rchild)
中序
def inorder(self, root):
"""递归实现中序遍历"""
if root == None:
return
self.inorder(root.lchild)
print root.elem
self.inorder(root.rchild)
后序
def postorder(self, root):
"""递归实现后续遍历"""
if root == None:
return
self.postorder(root.lchild)
self.postorder(root.rchild)
print root.elem
层次遍历
def breadth_travel(self, root):
"""利用队列实现树的层次遍历"""
if root == None:
return
queue = []
queue.append(root)
while queue:
node = queue.pop(0)
print node.elem,
if node.lchild != None:
queue.append(node.lchild)
if node.rchild != None:
queue.append(node.rchild)
|