• 二叉树 —— 按层遍历


    二叉树的遍历

    二叉树的遍历分先序、中序、后序和层次遍历。实现方式分递归和非递归方式。

    这里说说层次遍历。

    层次遍历是逐层访问二叉树的每个节点。属于广度优先。常常使用队列的方式。

    如图有以下一棵二叉树,它构建的队列形式为:

      

    1、先把根节点 1 放入队列,然后弹出,看看它有没有左右孩子,如果有,按顺序将左右孩子放入队列

    接着按顺序弹出  2 ,看  2  是否还孩子,如果有将2 的孩子加入队列。

    接着弹出 3 看其是否有孩子,如果有依次加入

    然后弹出4,看4 是否孩子节点,接着弹出5,看5 是否有孩子节点,如果有 就依次加入队列,显然本例中4 、 5 都没有孩子节点

    然后继续弹出6 ,6有孩子节点,依次加入队列,

    然后依次弹出7,8这样就对整个二叉树完成了遍历

     下面这道题就是根据上图这个方式完成的。

    有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。

    给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列

    本题的关键是 指定两个变量 last 和 nlast 来对节点进行跟踪。

    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    class TreePrinter:
        def printTree(self, root):
            # write code here
            if root == None:
                return []
            queue = []     #定义一个队列,盛放节点
            result = []    #定义一个列表,盛放最终结果
            temp = []      #定义一个列表,盛放改行所有节点的值。
            last = nlast = root  #关键:定义两个变量 last nlast  其中:last 永远指向本行最右节点。
                                         #nlast 永远指向 下一行的最右节点 queue.append(root) #首先将root节点 加入队列
    while queue: node = queue.pop(0) #弹出队列的第一个节点 temp.append(node.val) #将弹出节点的值,放入temp 列表。 if node.left: queue.append(node.left) #如果弹出节点有左子树,那么将左孩子节点加入队列 nlast = node.left #因为nlast总是执行下一行的最右节点。所以要更新nlast指向。 if node.right: queue.append(node.right) #如果弹出节点有右子树,那么将右孩子加入队列 nlast = node.right # 同时再次更新nlast的指向。 if last == node: #如果弹出节点 == last 指向的节点(last总是指向本行最右节点) 说明一行结束了 last = nlast # 当前行已经结束了,所以更新last使其指向 下一行 的最右节点。 result.append(temp) #将上一行的所有节点的值的结果列表放入最终结果中。 temp = [] # 将temp置空,准备盛放下一行的所有节点的值 return result #返回最终结果
                                                                 
  • 相关阅读:
    链表 | 递归删除不带头结点链表所有x元素
    A1016 | 磨人的大模拟
    Ubuntu 下安装 Qt Designer
    shell札记
    A1102 | 反转二叉树
    顺序表 | 二分查找:两个数组合并后的中位数
    A1113 | Integer Set Partition (25)
    A1128 | 逻辑想象能力、简洁高效美观的代码、memset的使用情景
    05.字符串
    04.序列的应用
  • 原文地址:https://www.cnblogs.com/jijizhazha/p/6118054.html
Copyright © 2020-2023  润新知