二叉树的4种遍历
先看图,对于这个图进行4种遍历的讲解
1. 先序遍历
定义:若二叉树为空,则空操作;否则(1)访问根节点(2)先序遍历左子树(3)先序遍历右子树
根据定义我需要解释一下,定义很简单,其实定义是对于每一子树而言的,我们先遍历A然后B,这时候我们不能遍历C结点,因为B结点是它下面子树的根节点,把B看成根节点进行访问,B->D,下面我们当然是把D结点看成根节点,不能访问E结点,需要访问H,再把H结点看成根节点,因为下面为空,那么就访问I 结点->E,把E结点再次看成根节点进行定义的方式的访问->J,其实它的本质从大家到小家,从小家再到小小家一直这样访问下去
访问的顺序:A B D H I E J C F K G
2、中序遍历
定义:若二叉树为空,则空操作;否则(1)中序遍历的左子树(2)访问根节点(3)中序访问的右子树
还是那样的思想,把每次访问看成一个小家,进行访问:我们需要先访问左节点,先找到根节点A->B,把B看成根节点->D,把D看成根节点->H,这时候我们就找到第一个左节点,那就首先访问H根据定义来->D->I,那下面访问哪一个,我们已经访问完了已D为根节点的小家,D又是上面大家的左节点,那就需要访问大家的根节点B,然后访问E,其实不应该是E,应为已E为根节点的小家,左节点为空,那就下一步为结点E,然后J,……
访问的顺序:H D I B E J A F K C G
3、后序遍历
定义:定义:若二叉树为空,则空操作;否则(1)后序遍历的左子树(2)后序遍历的右子树(3)访问根节点
不在详细解释了,按照前面的思想,本质就是,大家找小家,小家找小小家……
访问顺序: H I D J E B K F G C A
4 层序遍历
不用多说大家都会吧
访问顺序:A B C D E F G H I J K
练习:
接下来一个小例子,用二叉树方法排序
class BTree:
root=None #根
class Node: #内部类关系
data=None
left=None
right=None
def zhongxu(self):
if self.left is not None:
self.left.zhongxu()
print(self.data)
if self.right is not None:
self.right.zhongxu()
def add(self,node):
if self.data>node.data:
if self.left is None:
self.left=node
else:
self.left.add(node)
if self.data<node.data:
if self.right is None:
self.right=node
else:
self.right.add(node)
def add(self,data):
node=self.Node()
node.data=data
if self.root is None:
self.root=node
else:
self.root.add(node)
def zhongxu(self):
self.root.zhongxu()
if __name__=='__main__':
btree=BTree()
btree.add(25)
btree.add(83)
btree.add(45)
btree.add(4)
btree.add(245)
btree.add(3)
btree.add(258)
btree.add(33)
btree.add(77)
btree.add(88)
btree.add(58)
btree.add(453)
btree.add(555)
btree.add(22)
btree.zhongxu()
3
4
22
25
33
45
58
77
83
88
245
258
453
555