手敲下二叉树
#coding=utf-8
class Node(object):
def __init__(self, ele=1, left=None, right=None):
self.ele = ele
self.l = left
self.r = right
class BinaryTree(object):
def __init__(self, root=None):
self.root = root
def add(self, ele):
node=Node(ele=ele)
if self.root == None:
self.root = node
else:
queue = [self.root]
while queue:
cur = queue.pop(0)
if cur.l == None:
cur.l = node
return
if cur.r == None:
cur.r = node
return
queue.append(cur.l)
queue.append(cur.r)
def breath_tral(self):
if self.root == None:
print('空树')
return
else:
queue = [self.root]
while queue:
cur = queue.pop(0)
print(cur.ele)
if cur.l != None: queue.append(cur.l)
if cur.r != None: queue.append(cur.r)
def pre_tral(self, cur):
if cur == None:
return
else:
print(cur.ele)
self.pre_tral(cur.l)
self.pre_tral(cur.r)
def mid_tral(self, cur):
if cur == None:
return
else:
self.mid_tral(cur.l)
print(cur.ele)
self.mid_tral(cur.r)
def post_tral(self, cur):
if cur == None:
return
else:
self.post_tral(cur.l)
self.post_tral(cur.r)
print(cur.ele)
if __name__ == "__main__":
tree = BinaryTree()
tree.add(1)
tree.add(2)
tree.add(3)
tree.add(5)
tree.add(6)
tree.add(7)
tree.add(8)
# tree.breath_tral()
# tree.pre_tral(tree.root)
tree.post_tral(tree.root)
二叉树的性质:
-
二叉树有以下几个性质:TODO(上标和下标)
性质1:二叉树第i层上的结点数目最多为 2{i-1} (i≥1)。
性质2:深度为k的二叉树至多有2{k}-1个结点(k≥1)。
性质3:包含n个结点的二叉树的高度至少为log2 (n+1)。
性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1。 -
定义:高度为h,并且由2{h} –1个结点的二叉树,被称为满二叉树。
-
完全二叉树
定义:一棵二叉树中,只有最下面两层结点的度可以小于2,并且最下一层的叶结点集中在靠左的若干位置上。这样的二叉树称为完全二叉树。
图片来自:http://www.cnblogs.com/skywang12345/p/3576328.html