首页 > 其他 > 详细

二叉树

时间:2019-09-24 14:27:03      阅读:72      评论:0      收藏:0      [点我收藏+]

完全二叉树

对一颗具有n个结点的二叉树按层进行编号,如果编号为i (1 <= i <= n)的结点与同样深度的满二叉树节点编号为i的结点在二叉树中的位置完全相同,则这颗树,我们称之为完全二叉树。

技术分享图片

 

 先序遍历(左-中-右):1,2,4,8,9,5,3,6,7

中序遍历(中-左-右):8,4,9,2,5,1,6,3,7

后序遍历(左-右-中):8,9,4,5,2,6,7,3,1

层次遍历(宽度优先遍历):利用队列,依次将根,左子树,右子树存入队列,按照队列先进先出规则来实现层次遍历。1,2,3,4,5,6,7,8,9

深度优先遍历:利用,先将根入栈,再将根出栈,并将根的右子树,左子树存入栈,按照先进后出规则来实现深度优先遍历。1,2,4,8,9,5,3,6,7

class Node:  
    def __init__(self,value=None,left=None,right=None):  
         self.value=value  
         self.left=left    #左子树
         self.right=right  #右子树
def preTraverse(root):  
    ‘‘‘
    前序遍历
    ‘‘‘
    if root==None:  
        return  
    print(root.value)  
    preTraverse(root.left)  
    preTraverse(root.right)  
 
def midTraverse(root): 
    ‘‘‘
    中序遍历
    ‘‘‘
    if root==None:  
        return  
    midTraverse(root.left)  
    print(root.value)  
    midTraverse(root.right)  
  
def afterTraverse(root):  
    ‘‘‘
    后序遍历
    ‘‘‘
    if root==None:  
        return  
    afterTraverse(root.left)  
    afterTraverse(root.right)  
    print(root.value)
    
if __name__==‘__main__‘:
    root=Node(‘D‘,Node(‘B‘,Node(‘A‘),Node(‘C‘)),Node(‘E‘,right=Node(‘G‘,Node(‘F‘))))
    print(‘前序遍历:‘)
    preTraverse(root)
    print(‘\n‘)
    print(‘中序遍历:‘)
    midTraverse(root)
    print(‘\n‘)
    print(‘后序遍历:‘)
    afterTraverse(root)
    print(‘\n‘)

  广度优先(队列,先进先出)

def BFS(self, root):
    ‘‘‘广度优先‘‘‘
    if root == None:
        return
    # queue队列,保存节点
    queue = []
    # res保存节点值,作为结果
    #vals = []
    queue.append(root)

    while queue:
        # 拿出队首节点
        currentNode = queue.pop(0)
        #vals.append(currentNode.val)
        print(currentNode.val, end=‘ ‘)
        if currentNode.left:
            queue.append(currentNode.left)
        if currentNode.right:
            queue.append(currentNode.right)
    #return vals

  深度优先(栈,后进先出)

def DFS(self, root):
    ‘‘‘深度优先‘‘‘
    if root == None:
        return
    # 栈用来保存未访问节点
    stack = []
    # vals保存节点值,作为结果
    #vals = []
    stack.append(root)

    while stack:
        # 拿出栈顶节点
        currentNode = stack.pop()
        #vals.append(currentNode.val)
        print(currentNode.val, end=‘ ‘)
        if currentNode.right:
            stack.append(currentNode.right)
        if currentNode.left:
            stack.append(currentNode.left)
    #return vals

  

 

二叉树

原文:https://www.cnblogs.com/iupoint/p/11578052.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!