完全二叉树和三序遍历算法(先序)(上)
完全二叉树先序遍历
完全二叉树概念:
1、没有叶子节点得都在最后两层
2、且最后一层得节点都集中在左边,倒数第二层没有空节点
2、且最后一层得节点都集中在左边,倒数第二层没有空节点
先序遍历
先遍根节点,再遍历左子树,再到右子树
中序遍历
先遍历左子数,再遍历根节点再遍历右子树
后序遍历
先遍历左子树,再遍历右子树,再遍历根节点
创建二叉树:
>>> class TreeNode():
... def __init__(self,var,left=None,right=None):
... self.var=var
... self.left=left
... self.right=right
...
>>> class BinaryTree():
... def __init__(self,root):
... self.root=root
... def __init__(self,var,left=None,right=None):
... self.var=var
... self.left=left
... self.right=right
...
>>> class BinaryTree():
... def __init__(self,root):
... self.root=root
先序遍历算法:
>>> def PreOrder(retlist,node):
... if node!=None:#如果节点为空就可以直接退出,完全二叉树开始为空得节点后开始就不会再有节点内容
... retlist.append(node)#先输出根节点
... retlist.append(node.left)#再输出左节点
... retlist.append(node.right)#再输出右节点
... return retlist
... if node!=None:#如果节点为空就可以直接退出,完全二叉树开始为空得节点后开始就不会再有节点内容
... retlist.append(node)#先输出根节点
... retlist.append(node.left)#再输出左节点
... retlist.append(node.right)#再输出右节点
... return retlist
创建二叉树:
>>> x=TreeNode(1)#添加根节点
>>> x.left=TreeNode(2,left=TreeNode(4,left=TreeNode(8),right=TreeNode(9)))#添加根节点下得左节点部分
>>> x.right=TreeNode(3,left=TreeNode(12))#与上相反
>>> x.right=TreeNode(3,left=TreeNode(12))#与上相反
先序算法读取二叉树:
>>> try:
... result=PreOrder([],binarytree.root)
... except:
... traceback.print_exc()
... result=PreOrder([],binarytree.root)
... except:
... traceback.print_exc()